1bccedf53Smrg#! /bin/sh 2bccedf53Smrg# mkinstalldirs --- make directory hierarchy 3bccedf53Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 4bccedf53Smrg# Created: 1993-05-16 5bccedf53Smrg# Public domain 6bccedf53Smrg 7bccedf53Smrgerrstatus=0 8bccedf53Smrgdirmode="" 9bccedf53Smrg 10bccedf53Smrgusage="\ 11bccedf53SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 12bccedf53Smrg 13bccedf53Smrg# process command line arguments 14bccedf53Smrgwhile test $# -gt 0 ; do 15bccedf53Smrg case $1 in 16bccedf53Smrg -h | --help | --h*) # -h for help 17bccedf53Smrg echo "$usage" 1>&2 18bccedf53Smrg exit 0 19bccedf53Smrg ;; 20bccedf53Smrg -m) # -m PERM arg 21bccedf53Smrg shift 22bccedf53Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 23bccedf53Smrg dirmode=$1 24bccedf53Smrg shift 25bccedf53Smrg ;; 26bccedf53Smrg --) # stop option processing 27bccedf53Smrg shift 28bccedf53Smrg break 29bccedf53Smrg ;; 30bccedf53Smrg -*) # unknown option 31bccedf53Smrg echo "$usage" 1>&2 32bccedf53Smrg exit 1 33bccedf53Smrg ;; 34bccedf53Smrg *) # first non-opt arg 35bccedf53Smrg break 36bccedf53Smrg ;; 37bccedf53Smrg esac 38bccedf53Smrgdone 39bccedf53Smrg 40bccedf53Smrgfor file 41bccedf53Smrgdo 42bccedf53Smrg if test -d "$file"; then 43bccedf53Smrg shift 44bccedf53Smrg else 45bccedf53Smrg break 46bccedf53Smrg fi 47bccedf53Smrgdone 48bccedf53Smrg 49bccedf53Smrgcase $# in 50bccedf53Smrg 0) exit 0 ;; 51bccedf53Smrgesac 52bccedf53Smrg 53bccedf53Smrgcase $dirmode in 54bccedf53Smrg '') 55bccedf53Smrg if mkdir -p -- . 2>/dev/null; then 56bccedf53Smrg echo "mkdir -p -- $*" 57bccedf53Smrg exec mkdir -p -- "$@" 58bccedf53Smrg fi 59bccedf53Smrg ;; 60bccedf53Smrg *) 61bccedf53Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 62bccedf53Smrg echo "mkdir -m $dirmode -p -- $*" 63bccedf53Smrg exec mkdir -m "$dirmode" -p -- "$@" 64bccedf53Smrg fi 65bccedf53Smrg ;; 66bccedf53Smrgesac 67bccedf53Smrg 68bccedf53Smrgfor file 69bccedf53Smrgdo 70bccedf53Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 71bccedf53Smrg shift 72bccedf53Smrg 73bccedf53Smrg pathcomp= 74bccedf53Smrg for d 75bccedf53Smrg do 76bccedf53Smrg pathcomp="$pathcomp$d" 77bccedf53Smrg case $pathcomp in 78bccedf53Smrg -*) pathcomp=./$pathcomp ;; 79bccedf53Smrg esac 80bccedf53Smrg 81bccedf53Smrg if test ! -d "$pathcomp"; then 82bccedf53Smrg echo "mkdir $pathcomp" 83bccedf53Smrg 84bccedf53Smrg mkdir "$pathcomp" || lasterr=$? 85bccedf53Smrg 86bccedf53Smrg if test ! -d "$pathcomp"; then 87bccedf53Smrg errstatus=$lasterr 88bccedf53Smrg else 89bccedf53Smrg if test ! -z "$dirmode"; then 90bccedf53Smrg echo "chmod $dirmode $pathcomp" 91bccedf53Smrg lasterr="" 92bccedf53Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 93bccedf53Smrg 94bccedf53Smrg if test ! -z "$lasterr"; then 95bccedf53Smrg errstatus=$lasterr 96bccedf53Smrg fi 97bccedf53Smrg fi 98bccedf53Smrg fi 99bccedf53Smrg fi 100bccedf53Smrg 101bccedf53Smrg pathcomp="$pathcomp/" 102bccedf53Smrg done 103bccedf53Smrgdone 104bccedf53Smrg 105bccedf53Smrgexit $errstatus 106bccedf53Smrg 107bccedf53Smrg# Local Variables: 108bccedf53Smrg# mode: shell-script 109bccedf53Smrg# sh-indentation: 2 110bccedf53Smrg# End: 111bccedf53Smrg# mkinstalldirs ends here 112