summaryrefslogtreecommitdiff
path: root/mkinstalldirs
blob: d2d5f21b611235316317197d3a32c2dff5897a6f (plain)
    1 #! /bin/sh
    2 # mkinstalldirs --- make directory hierarchy
    3 # Author: Noah Friedman <friedman@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
   18       exit 0
   19       ;;
   20     -m)                         # -m PERM arg
   21       shift
   22       test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
   23       dirmode=$1
   24       shift
   25       ;;
   26     --)                         # stop option processing
   27       shift
   28       break
   29       ;;
   30     -*)                         # unknown option
   31       echo "$usage" 1>&2
   32       exit 1
   33       ;;
   34     *)                          # first non-opt arg
   35       break
   36       ;;
   37   esac
   38 done
   39 
   40 for file
   41 do
   42   if test -d "$file"; then
   43     shift
   44   else
   45     break
   46   fi
   47 done
   48 
   49 case $# in
   50   0) exit 0 ;;
   51 esac
   52 
   53 case $dirmode in
   54   '')
   55     if mkdir -p -- . 2>/dev/null; then
   56       echo "mkdir -p -- $*"
   57       exec mkdir -p -- "$@"
   58     fi
   59     ;;
   60   *)
   61     if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
   62       echo "mkdir -m $dirmode -p -- $*"
   63       exec mkdir -m "$dirmode" -p -- "$@"
   64     fi
   65     ;;
   66 esac
   67 
   68 for file
   69 do
   70   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
   71   shift
   72 
   73   pathcomp=
   74   for d
   75   do
   76     pathcomp="$pathcomp$d"
   77     case $pathcomp in
   78       -*) pathcomp=./$pathcomp ;;
   79     esac
   80 
   81     if test ! -d "$pathcomp"; then
   82       echo "mkdir $pathcomp"
   83 
   84       mkdir "$pathcomp" || lasterr=$?
   85 
   86       if test ! -d "$pathcomp"; then
   87   	errstatus=$lasterr
   88       else
   89   	if test ! -z "$dirmode"; then
   90 	  echo "chmod $dirmode $pathcomp"
   91     	  lasterr=""
   92   	  chmod "$dirmode" "$pathcomp" || lasterr=$?
   93 
   94   	  if test ! -z "$lasterr"; then
   95   	    errstatus=$lasterr
   96   	  fi
   97   	fi
   98       fi
   99     fi
  100 
  101     pathcomp="$pathcomp/"
  102   done
  103 done
  104 
  105 exit $errstatus
  106 
  107 # Local Variables:
  108 # mode: shell-script
  109 # sh-indentation: 2
  110 # End:
  111 # mkinstalldirs ends here

Generated by cgit