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