10bd0e222Smrg#! /bin/sh 20bd0e222Smrg# mkinstalldirs --- make directory hierarchy 30bd0e222Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 40bd0e222Smrg# Created: 1993-05-16 50bd0e222Smrg# Public domain 60bd0e222Smrg 70bd0e222Smrgerrstatus=0 80bd0e222Smrgdirmode="" 90bd0e222Smrg 100bd0e222Smrgusage="\ 110bd0e222SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 120bd0e222Smrg 130bd0e222Smrg# process command line arguments 140bd0e222Smrgwhile test $# -gt 0 ; do 150bd0e222Smrg case $1 in 160bd0e222Smrg -h | --help | --h*) # -h for help 170bd0e222Smrg echo "$usage" 1>&2 180bd0e222Smrg exit 0 190bd0e222Smrg ;; 200bd0e222Smrg -m) # -m PERM arg 210bd0e222Smrg shift 220bd0e222Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 230bd0e222Smrg dirmode=$1 240bd0e222Smrg shift 250bd0e222Smrg ;; 260bd0e222Smrg --) # stop option processing 270bd0e222Smrg shift 280bd0e222Smrg break 290bd0e222Smrg ;; 300bd0e222Smrg -*) # unknown option 310bd0e222Smrg echo "$usage" 1>&2 320bd0e222Smrg exit 1 330bd0e222Smrg ;; 340bd0e222Smrg *) # first non-opt arg 350bd0e222Smrg break 360bd0e222Smrg ;; 370bd0e222Smrg esac 380bd0e222Smrgdone 390bd0e222Smrg 400bd0e222Smrgfor file 410bd0e222Smrgdo 420bd0e222Smrg if test -d "$file"; then 430bd0e222Smrg shift 440bd0e222Smrg else 450bd0e222Smrg break 460bd0e222Smrg fi 470bd0e222Smrgdone 480bd0e222Smrg 490bd0e222Smrgcase $# in 500bd0e222Smrg 0) exit 0 ;; 510bd0e222Smrgesac 520bd0e222Smrg 530bd0e222Smrgcase $dirmode in 540bd0e222Smrg '') 550bd0e222Smrg if mkdir -p -- . 2>/dev/null; then 560bd0e222Smrg echo "mkdir -p -- $*" 570bd0e222Smrg exec mkdir -p -- "$@" 580bd0e222Smrg fi 590bd0e222Smrg ;; 600bd0e222Smrg *) 610bd0e222Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 620bd0e222Smrg echo "mkdir -m $dirmode -p -- $*" 630bd0e222Smrg exec mkdir -m "$dirmode" -p -- "$@" 640bd0e222Smrg fi 650bd0e222Smrg ;; 660bd0e222Smrgesac 670bd0e222Smrg 680bd0e222Smrgfor file 690bd0e222Smrgdo 700bd0e222Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 710bd0e222Smrg shift 720bd0e222Smrg 730bd0e222Smrg pathcomp= 740bd0e222Smrg for d 750bd0e222Smrg do 760bd0e222Smrg pathcomp="$pathcomp$d" 770bd0e222Smrg case $pathcomp in 780bd0e222Smrg -*) pathcomp=./$pathcomp ;; 790bd0e222Smrg esac 800bd0e222Smrg 810bd0e222Smrg if test ! -d "$pathcomp"; then 820bd0e222Smrg echo "mkdir $pathcomp" 830bd0e222Smrg 840bd0e222Smrg mkdir "$pathcomp" || lasterr=$? 850bd0e222Smrg 860bd0e222Smrg if test ! -d "$pathcomp"; then 870bd0e222Smrg errstatus=$lasterr 880bd0e222Smrg else 890bd0e222Smrg if test ! -z "$dirmode"; then 900bd0e222Smrg echo "chmod $dirmode $pathcomp" 910bd0e222Smrg lasterr="" 920bd0e222Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 930bd0e222Smrg 940bd0e222Smrg if test ! -z "$lasterr"; then 950bd0e222Smrg errstatus=$lasterr 960bd0e222Smrg fi 970bd0e222Smrg fi 980bd0e222Smrg fi 990bd0e222Smrg fi 1000bd0e222Smrg 1010bd0e222Smrg pathcomp="$pathcomp/" 1020bd0e222Smrg done 1030bd0e222Smrgdone 1040bd0e222Smrg 1050bd0e222Smrgexit $errstatus 1060bd0e222Smrg 1070bd0e222Smrg# Local Variables: 1080bd0e222Smrg# mode: shell-script 1090bd0e222Smrg# sh-indentation: 2 1100bd0e222Smrg# End: 1110bd0e222Smrg# mkinstalldirs ends here 112