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