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