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