mkinstalldirs revision 4ecf19b2
14ecf19b2Smrg#! /bin/sh 24ecf19b2Smrg# mkinstalldirs --- make directory hierarchy 34ecf19b2Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 44ecf19b2Smrg# Created: 1993-05-16 54ecf19b2Smrg# Public domain 64ecf19b2Smrg 74ecf19b2Smrgerrstatus=0 84ecf19b2Smrgdirmode="" 94ecf19b2Smrg 104ecf19b2Smrgusage="\ 114ecf19b2SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 124ecf19b2Smrg 134ecf19b2Smrg# process command line arguments 144ecf19b2Smrgwhile test $# -gt 0 ; do 154ecf19b2Smrg case $1 in 164ecf19b2Smrg -h | --help | --h*) # -h for help 174ecf19b2Smrg echo "$usage" 1>&2 184ecf19b2Smrg exit 0 194ecf19b2Smrg ;; 204ecf19b2Smrg -m) # -m PERM arg 214ecf19b2Smrg shift 224ecf19b2Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 234ecf19b2Smrg dirmode=$1 244ecf19b2Smrg shift 254ecf19b2Smrg ;; 264ecf19b2Smrg --) # stop option processing 274ecf19b2Smrg shift 284ecf19b2Smrg break 294ecf19b2Smrg ;; 304ecf19b2Smrg -*) # unknown option 314ecf19b2Smrg echo "$usage" 1>&2 324ecf19b2Smrg exit 1 334ecf19b2Smrg ;; 344ecf19b2Smrg *) # first non-opt arg 354ecf19b2Smrg break 364ecf19b2Smrg ;; 374ecf19b2Smrg esac 384ecf19b2Smrgdone 394ecf19b2Smrg 404ecf19b2Smrgfor file 414ecf19b2Smrgdo 424ecf19b2Smrg if test -d "$file"; then 434ecf19b2Smrg shift 444ecf19b2Smrg else 454ecf19b2Smrg break 464ecf19b2Smrg fi 474ecf19b2Smrgdone 484ecf19b2Smrg 494ecf19b2Smrgcase $# in 504ecf19b2Smrg 0) exit 0 ;; 514ecf19b2Smrgesac 524ecf19b2Smrg 534ecf19b2Smrgcase $dirmode in 544ecf19b2Smrg '') 554ecf19b2Smrg if mkdir -p -- . 2>/dev/null; then 564ecf19b2Smrg echo "mkdir -p -- $*" 574ecf19b2Smrg exec mkdir -p -- "$@" 584ecf19b2Smrg fi 594ecf19b2Smrg ;; 604ecf19b2Smrg *) 614ecf19b2Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 624ecf19b2Smrg echo "mkdir -m $dirmode -p -- $*" 634ecf19b2Smrg exec mkdir -m "$dirmode" -p -- "$@" 644ecf19b2Smrg fi 654ecf19b2Smrg ;; 664ecf19b2Smrgesac 674ecf19b2Smrg 684ecf19b2Smrgfor file 694ecf19b2Smrgdo 704ecf19b2Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 714ecf19b2Smrg shift 724ecf19b2Smrg 734ecf19b2Smrg pathcomp= 744ecf19b2Smrg for d 754ecf19b2Smrg do 764ecf19b2Smrg pathcomp="$pathcomp$d" 774ecf19b2Smrg case $pathcomp in 784ecf19b2Smrg -*) pathcomp=./$pathcomp ;; 794ecf19b2Smrg esac 804ecf19b2Smrg 814ecf19b2Smrg if test ! -d "$pathcomp"; then 824ecf19b2Smrg echo "mkdir $pathcomp" 834ecf19b2Smrg 844ecf19b2Smrg mkdir "$pathcomp" || lasterr=$? 854ecf19b2Smrg 864ecf19b2Smrg if test ! -d "$pathcomp"; then 874ecf19b2Smrg errstatus=$lasterr 884ecf19b2Smrg else 894ecf19b2Smrg if test ! -z "$dirmode"; then 904ecf19b2Smrg echo "chmod $dirmode $pathcomp" 914ecf19b2Smrg lasterr="" 924ecf19b2Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 934ecf19b2Smrg 944ecf19b2Smrg if test ! -z "$lasterr"; then 954ecf19b2Smrg errstatus=$lasterr 964ecf19b2Smrg fi 974ecf19b2Smrg fi 984ecf19b2Smrg fi 994ecf19b2Smrg fi 1004ecf19b2Smrg 1014ecf19b2Smrg pathcomp="$pathcomp/" 1024ecf19b2Smrg done 1034ecf19b2Smrgdone 1044ecf19b2Smrg 1054ecf19b2Smrgexit $errstatus 1064ecf19b2Smrg 1074ecf19b2Smrg# Local Variables: 1084ecf19b2Smrg# mode: shell-script 1094ecf19b2Smrg# sh-indentation: 2 1104ecf19b2Smrg# End: 1114ecf19b2Smrg# mkinstalldirs ends here 112