108f3b10eSmrg#! /bin/sh 208f3b10eSmrg# mkinstalldirs --- make directory hierarchy 308f3b10eSmrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 408f3b10eSmrg# Created: 1993-05-16 508f3b10eSmrg# Public domain 608f3b10eSmrg 708f3b10eSmrgerrstatus=0 808f3b10eSmrgdirmode="" 908f3b10eSmrg 1008f3b10eSmrgusage="\ 1108f3b10eSmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 1208f3b10eSmrg 1308f3b10eSmrg# process command line arguments 1408f3b10eSmrgwhile test $# -gt 0 ; do 1508f3b10eSmrg case $1 in 1608f3b10eSmrg -h | --help | --h*) # -h for help 1708f3b10eSmrg echo "$usage" 1>&2 1808f3b10eSmrg exit 0 1908f3b10eSmrg ;; 2008f3b10eSmrg -m) # -m PERM arg 2108f3b10eSmrg shift 2208f3b10eSmrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 2308f3b10eSmrg dirmode=$1 2408f3b10eSmrg shift 2508f3b10eSmrg ;; 2608f3b10eSmrg --) # stop option processing 2708f3b10eSmrg shift 2808f3b10eSmrg break 2908f3b10eSmrg ;; 3008f3b10eSmrg -*) # unknown option 3108f3b10eSmrg echo "$usage" 1>&2 3208f3b10eSmrg exit 1 3308f3b10eSmrg ;; 3408f3b10eSmrg *) # first non-opt arg 3508f3b10eSmrg break 3608f3b10eSmrg ;; 3708f3b10eSmrg esac 3808f3b10eSmrgdone 3908f3b10eSmrg 4008f3b10eSmrgfor file 4108f3b10eSmrgdo 4208f3b10eSmrg if test -d "$file"; then 4308f3b10eSmrg shift 4408f3b10eSmrg else 4508f3b10eSmrg break 4608f3b10eSmrg fi 4708f3b10eSmrgdone 4808f3b10eSmrg 4908f3b10eSmrgcase $# in 5008f3b10eSmrg 0) exit 0 ;; 5108f3b10eSmrgesac 5208f3b10eSmrg 5308f3b10eSmrgcase $dirmode in 5408f3b10eSmrg '') 5508f3b10eSmrg if mkdir -p -- . 2>/dev/null; then 5608f3b10eSmrg echo "mkdir -p -- $*" 5708f3b10eSmrg exec mkdir -p -- "$@" 5808f3b10eSmrg fi 5908f3b10eSmrg ;; 6008f3b10eSmrg *) 6108f3b10eSmrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 6208f3b10eSmrg echo "mkdir -m $dirmode -p -- $*" 6308f3b10eSmrg exec mkdir -m "$dirmode" -p -- "$@" 6408f3b10eSmrg fi 6508f3b10eSmrg ;; 6608f3b10eSmrgesac 6708f3b10eSmrg 6808f3b10eSmrgfor file 6908f3b10eSmrgdo 7008f3b10eSmrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 7108f3b10eSmrg shift 7208f3b10eSmrg 7308f3b10eSmrg pathcomp= 7408f3b10eSmrg for d 7508f3b10eSmrg do 7608f3b10eSmrg pathcomp="$pathcomp$d" 7708f3b10eSmrg case $pathcomp in 7808f3b10eSmrg -*) pathcomp=./$pathcomp ;; 7908f3b10eSmrg esac 8008f3b10eSmrg 8108f3b10eSmrg if test ! -d "$pathcomp"; then 8208f3b10eSmrg echo "mkdir $pathcomp" 8308f3b10eSmrg 8408f3b10eSmrg mkdir "$pathcomp" || lasterr=$? 8508f3b10eSmrg 8608f3b10eSmrg if test ! -d "$pathcomp"; then 8708f3b10eSmrg errstatus=$lasterr 8808f3b10eSmrg else 8908f3b10eSmrg if test ! -z "$dirmode"; then 9008f3b10eSmrg echo "chmod $dirmode $pathcomp" 9108f3b10eSmrg lasterr="" 9208f3b10eSmrg chmod "$dirmode" "$pathcomp" || lasterr=$? 9308f3b10eSmrg 9408f3b10eSmrg if test ! -z "$lasterr"; then 9508f3b10eSmrg errstatus=$lasterr 9608f3b10eSmrg fi 9708f3b10eSmrg fi 9808f3b10eSmrg fi 9908f3b10eSmrg fi 10008f3b10eSmrg 10108f3b10eSmrg pathcomp="$pathcomp/" 10208f3b10eSmrg done 10308f3b10eSmrgdone 10408f3b10eSmrg 10508f3b10eSmrgexit $errstatus 10608f3b10eSmrg 10708f3b10eSmrg# Local Variables: 10808f3b10eSmrg# mode: shell-script 10908f3b10eSmrg# sh-indentation: 2 11008f3b10eSmrg# End: 11108f3b10eSmrg# mkinstalldirs ends here 112