1b7d53ee5Smrg#! /bin/sh 2b7d53ee5Smrg# mkinstalldirs --- make directory hierarchy 3b7d53ee5Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 4b7d53ee5Smrg# Created: 1993-05-16 5b7d53ee5Smrg# Public domain 6b7d53ee5Smrg 7b7d53ee5Smrgerrstatus=0 8b7d53ee5Smrgdirmode="" 9b7d53ee5Smrg 10b7d53ee5Smrgusage="\ 11b7d53ee5SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 12b7d53ee5Smrg 13b7d53ee5Smrg# process command line arguments 14b7d53ee5Smrgwhile test $# -gt 0 ; do 15b7d53ee5Smrg case $1 in 16b7d53ee5Smrg -h | --help | --h*) # -h for help 17b7d53ee5Smrg echo "$usage" 1>&2 18b7d53ee5Smrg exit 0 19b7d53ee5Smrg ;; 20b7d53ee5Smrg -m) # -m PERM arg 21b7d53ee5Smrg shift 22b7d53ee5Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 23b7d53ee5Smrg dirmode=$1 24b7d53ee5Smrg shift 25b7d53ee5Smrg ;; 26b7d53ee5Smrg --) # stop option processing 27b7d53ee5Smrg shift 28b7d53ee5Smrg break 29b7d53ee5Smrg ;; 30b7d53ee5Smrg -*) # unknown option 31b7d53ee5Smrg echo "$usage" 1>&2 32b7d53ee5Smrg exit 1 33b7d53ee5Smrg ;; 34b7d53ee5Smrg *) # first non-opt arg 35b7d53ee5Smrg break 36b7d53ee5Smrg ;; 37b7d53ee5Smrg esac 38b7d53ee5Smrgdone 39b7d53ee5Smrg 40b7d53ee5Smrgfor file 41b7d53ee5Smrgdo 42b7d53ee5Smrg if test -d "$file"; then 43b7d53ee5Smrg shift 44b7d53ee5Smrg else 45b7d53ee5Smrg break 46b7d53ee5Smrg fi 47b7d53ee5Smrgdone 48b7d53ee5Smrg 49b7d53ee5Smrgcase $# in 50b7d53ee5Smrg 0) exit 0 ;; 51b7d53ee5Smrgesac 52b7d53ee5Smrg 53b7d53ee5Smrgcase $dirmode in 54b7d53ee5Smrg '') 55b7d53ee5Smrg if mkdir -p -- . 2>/dev/null; then 56b7d53ee5Smrg echo "mkdir -p -- $*" 57b7d53ee5Smrg exec mkdir -p -- "$@" 58b7d53ee5Smrg fi 59b7d53ee5Smrg ;; 60b7d53ee5Smrg *) 61b7d53ee5Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 62b7d53ee5Smrg echo "mkdir -m $dirmode -p -- $*" 63b7d53ee5Smrg exec mkdir -m "$dirmode" -p -- "$@" 64b7d53ee5Smrg fi 65b7d53ee5Smrg ;; 66b7d53ee5Smrgesac 67b7d53ee5Smrg 68b7d53ee5Smrgfor file 69b7d53ee5Smrgdo 70b7d53ee5Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 71b7d53ee5Smrg shift 72b7d53ee5Smrg 73b7d53ee5Smrg pathcomp= 74b7d53ee5Smrg for d 75b7d53ee5Smrg do 76b7d53ee5Smrg pathcomp="$pathcomp$d" 77b7d53ee5Smrg case $pathcomp in 78b7d53ee5Smrg -*) pathcomp=./$pathcomp ;; 79b7d53ee5Smrg esac 80b7d53ee5Smrg 81b7d53ee5Smrg if test ! -d "$pathcomp"; then 82b7d53ee5Smrg echo "mkdir $pathcomp" 83b7d53ee5Smrg 84b7d53ee5Smrg mkdir "$pathcomp" || lasterr=$? 85b7d53ee5Smrg 86b7d53ee5Smrg if test ! -d "$pathcomp"; then 87b7d53ee5Smrg errstatus=$lasterr 88b7d53ee5Smrg else 89b7d53ee5Smrg if test ! -z "$dirmode"; then 90b7d53ee5Smrg echo "chmod $dirmode $pathcomp" 91b7d53ee5Smrg lasterr="" 92b7d53ee5Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 93b7d53ee5Smrg 94b7d53ee5Smrg if test ! -z "$lasterr"; then 95b7d53ee5Smrg errstatus=$lasterr 96b7d53ee5Smrg fi 97b7d53ee5Smrg fi 98b7d53ee5Smrg fi 99b7d53ee5Smrg fi 100b7d53ee5Smrg 101b7d53ee5Smrg pathcomp="$pathcomp/" 102b7d53ee5Smrg done 103b7d53ee5Smrgdone 104b7d53ee5Smrg 105b7d53ee5Smrgexit $errstatus 106b7d53ee5Smrg 107b7d53ee5Smrg# Local Variables: 108b7d53ee5Smrg# mode: shell-script 109b7d53ee5Smrg# sh-indentation: 2 110b7d53ee5Smrg# End: 111b7d53ee5Smrg# mkinstalldirs ends here 112