11cc8c64fSmrg#! /bin/sh 21cc8c64fSmrg# mkinstalldirs --- make directory hierarchy 31cc8c64fSmrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 41cc8c64fSmrg# Created: 1993-05-16 51cc8c64fSmrg# Public domain 61cc8c64fSmrg 71cc8c64fSmrgerrstatus=0 81cc8c64fSmrgdirmode="" 91cc8c64fSmrg 101cc8c64fSmrgusage="\ 111cc8c64fSmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 121cc8c64fSmrg 131cc8c64fSmrg# process command line arguments 141cc8c64fSmrgwhile test $# -gt 0 ; do 151cc8c64fSmrg case $1 in 161cc8c64fSmrg -h | --help | --h*) # -h for help 171cc8c64fSmrg echo "$usage" 1>&2 181cc8c64fSmrg exit 0 191cc8c64fSmrg ;; 201cc8c64fSmrg -m) # -m PERM arg 211cc8c64fSmrg shift 221cc8c64fSmrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 231cc8c64fSmrg dirmode=$1 241cc8c64fSmrg shift 251cc8c64fSmrg ;; 261cc8c64fSmrg --) # stop option processing 271cc8c64fSmrg shift 281cc8c64fSmrg break 291cc8c64fSmrg ;; 301cc8c64fSmrg -*) # unknown option 311cc8c64fSmrg echo "$usage" 1>&2 321cc8c64fSmrg exit 1 331cc8c64fSmrg ;; 341cc8c64fSmrg *) # first non-opt arg 351cc8c64fSmrg break 361cc8c64fSmrg ;; 371cc8c64fSmrg esac 381cc8c64fSmrgdone 391cc8c64fSmrg 401cc8c64fSmrgfor file 411cc8c64fSmrgdo 421cc8c64fSmrg if test -d "$file"; then 431cc8c64fSmrg shift 441cc8c64fSmrg else 451cc8c64fSmrg break 461cc8c64fSmrg fi 471cc8c64fSmrgdone 481cc8c64fSmrg 491cc8c64fSmrgcase $# in 501cc8c64fSmrg 0) exit 0 ;; 511cc8c64fSmrgesac 521cc8c64fSmrg 531cc8c64fSmrgcase $dirmode in 541cc8c64fSmrg '') 551cc8c64fSmrg if mkdir -p -- . 2>/dev/null; then 561cc8c64fSmrg echo "mkdir -p -- $*" 571cc8c64fSmrg exec mkdir -p -- "$@" 581cc8c64fSmrg fi 591cc8c64fSmrg ;; 601cc8c64fSmrg *) 611cc8c64fSmrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 621cc8c64fSmrg echo "mkdir -m $dirmode -p -- $*" 631cc8c64fSmrg exec mkdir -m "$dirmode" -p -- "$@" 641cc8c64fSmrg fi 651cc8c64fSmrg ;; 661cc8c64fSmrgesac 671cc8c64fSmrg 681cc8c64fSmrgfor file 691cc8c64fSmrgdo 701cc8c64fSmrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 711cc8c64fSmrg shift 721cc8c64fSmrg 731cc8c64fSmrg pathcomp= 741cc8c64fSmrg for d 751cc8c64fSmrg do 761cc8c64fSmrg pathcomp="$pathcomp$d" 771cc8c64fSmrg case $pathcomp in 781cc8c64fSmrg -*) pathcomp=./$pathcomp ;; 791cc8c64fSmrg esac 801cc8c64fSmrg 811cc8c64fSmrg if test ! -d "$pathcomp"; then 821cc8c64fSmrg echo "mkdir $pathcomp" 831cc8c64fSmrg 841cc8c64fSmrg mkdir "$pathcomp" || lasterr=$? 851cc8c64fSmrg 861cc8c64fSmrg if test ! -d "$pathcomp"; then 871cc8c64fSmrg errstatus=$lasterr 881cc8c64fSmrg else 891cc8c64fSmrg if test ! -z "$dirmode"; then 901cc8c64fSmrg echo "chmod $dirmode $pathcomp" 911cc8c64fSmrg lasterr="" 921cc8c64fSmrg chmod "$dirmode" "$pathcomp" || lasterr=$? 931cc8c64fSmrg 941cc8c64fSmrg if test ! -z "$lasterr"; then 951cc8c64fSmrg errstatus=$lasterr 961cc8c64fSmrg fi 971cc8c64fSmrg fi 981cc8c64fSmrg fi 991cc8c64fSmrg fi 1001cc8c64fSmrg 1011cc8c64fSmrg pathcomp="$pathcomp/" 1021cc8c64fSmrg done 1031cc8c64fSmrgdone 1041cc8c64fSmrg 1051cc8c64fSmrgexit $errstatus 1061cc8c64fSmrg 1071cc8c64fSmrg# Local Variables: 1081cc8c64fSmrg# mode: shell-script 1091cc8c64fSmrg# sh-indentation: 2 1101cc8c64fSmrg# End: 1111cc8c64fSmrg# mkinstalldirs ends here 112