13294c433Smrg#! /bin/sh 23294c433Smrg# mkinstalldirs --- make directory hierarchy 33294c433Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 43294c433Smrg# Created: 1993-05-16 53294c433Smrg# Public domain 63294c433Smrg 73294c433Smrgerrstatus=0 83294c433Smrgdirmode="" 93294c433Smrg 103294c433Smrgusage="\ 113294c433SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 123294c433Smrg 133294c433Smrg# process command line arguments 143294c433Smrgwhile test $# -gt 0 ; do 153294c433Smrg case $1 in 163294c433Smrg -h | --help | --h*) # -h for help 173294c433Smrg echo "$usage" 1>&2 183294c433Smrg exit 0 193294c433Smrg ;; 203294c433Smrg -m) # -m PERM arg 213294c433Smrg shift 223294c433Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 233294c433Smrg dirmode=$1 243294c433Smrg shift 253294c433Smrg ;; 263294c433Smrg --) # stop option processing 273294c433Smrg shift 283294c433Smrg break 293294c433Smrg ;; 303294c433Smrg -*) # unknown option 313294c433Smrg echo "$usage" 1>&2 323294c433Smrg exit 1 333294c433Smrg ;; 343294c433Smrg *) # first non-opt arg 353294c433Smrg break 363294c433Smrg ;; 373294c433Smrg esac 383294c433Smrgdone 393294c433Smrg 403294c433Smrgfor file 413294c433Smrgdo 423294c433Smrg if test -d "$file"; then 433294c433Smrg shift 443294c433Smrg else 453294c433Smrg break 463294c433Smrg fi 473294c433Smrgdone 483294c433Smrg 493294c433Smrgcase $# in 503294c433Smrg 0) exit 0 ;; 513294c433Smrgesac 523294c433Smrg 533294c433Smrgcase $dirmode in 543294c433Smrg '') 553294c433Smrg if mkdir -p -- . 2>/dev/null; then 563294c433Smrg echo "mkdir -p -- $*" 573294c433Smrg exec mkdir -p -- "$@" 583294c433Smrg fi 593294c433Smrg ;; 603294c433Smrg *) 613294c433Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 623294c433Smrg echo "mkdir -m $dirmode -p -- $*" 633294c433Smrg exec mkdir -m "$dirmode" -p -- "$@" 643294c433Smrg fi 653294c433Smrg ;; 663294c433Smrgesac 673294c433Smrg 683294c433Smrgfor file 693294c433Smrgdo 703294c433Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 713294c433Smrg shift 723294c433Smrg 733294c433Smrg pathcomp= 743294c433Smrg for d 753294c433Smrg do 763294c433Smrg pathcomp="$pathcomp$d" 773294c433Smrg case $pathcomp in 783294c433Smrg -*) pathcomp=./$pathcomp ;; 793294c433Smrg esac 803294c433Smrg 813294c433Smrg if test ! -d "$pathcomp"; then 823294c433Smrg echo "mkdir $pathcomp" 833294c433Smrg 843294c433Smrg mkdir "$pathcomp" || lasterr=$? 853294c433Smrg 863294c433Smrg if test ! -d "$pathcomp"; then 873294c433Smrg errstatus=$lasterr 883294c433Smrg else 893294c433Smrg if test ! -z "$dirmode"; then 903294c433Smrg echo "chmod $dirmode $pathcomp" 913294c433Smrg lasterr="" 923294c433Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 933294c433Smrg 943294c433Smrg if test ! -z "$lasterr"; then 953294c433Smrg errstatus=$lasterr 963294c433Smrg fi 973294c433Smrg fi 983294c433Smrg fi 993294c433Smrg fi 1003294c433Smrg 1013294c433Smrg pathcomp="$pathcomp/" 1023294c433Smrg done 1033294c433Smrgdone 1043294c433Smrg 1053294c433Smrgexit $errstatus 1063294c433Smrg 1073294c433Smrg# Local Variables: 1083294c433Smrg# mode: shell-script 1093294c433Smrg# sh-indentation: 2 1103294c433Smrg# End: 1113294c433Smrg# mkinstalldirs ends here 112