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