167332fb9Smrg#! /bin/sh 267332fb9Smrg# mkinstalldirs --- make directory hierarchy 367332fb9Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 467332fb9Smrg# Created: 1993-05-16 567332fb9Smrg# Public domain 667332fb9Smrg 767332fb9Smrgerrstatus=0 867332fb9Smrgdirmode="" 967332fb9Smrg 1067332fb9Smrgusage="\ 1167332fb9SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 1267332fb9Smrg 1367332fb9Smrg# process command line arguments 1467332fb9Smrgwhile test $# -gt 0 ; do 1567332fb9Smrg case $1 in 1667332fb9Smrg -h | --help | --h*) # -h for help 1767332fb9Smrg echo "$usage" 1>&2 1867332fb9Smrg exit 0 1967332fb9Smrg ;; 2067332fb9Smrg -m) # -m PERM arg 2167332fb9Smrg shift 2267332fb9Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 2367332fb9Smrg dirmode=$1 2467332fb9Smrg shift 2567332fb9Smrg ;; 2667332fb9Smrg --) # stop option processing 2767332fb9Smrg shift 2867332fb9Smrg break 2967332fb9Smrg ;; 3067332fb9Smrg -*) # unknown option 3167332fb9Smrg echo "$usage" 1>&2 3267332fb9Smrg exit 1 3367332fb9Smrg ;; 3467332fb9Smrg *) # first non-opt arg 3567332fb9Smrg break 3667332fb9Smrg ;; 3767332fb9Smrg esac 3867332fb9Smrgdone 3967332fb9Smrg 4067332fb9Smrgfor file 4167332fb9Smrgdo 4267332fb9Smrg if test -d "$file"; then 4367332fb9Smrg shift 4467332fb9Smrg else 4567332fb9Smrg break 4667332fb9Smrg fi 4767332fb9Smrgdone 4867332fb9Smrg 4967332fb9Smrgcase $# in 5067332fb9Smrg 0) exit 0 ;; 5167332fb9Smrgesac 5267332fb9Smrg 5367332fb9Smrgcase $dirmode in 5467332fb9Smrg '') 5567332fb9Smrg if mkdir -p -- . 2>/dev/null; then 5667332fb9Smrg echo "mkdir -p -- $*" 5767332fb9Smrg exec mkdir -p -- "$@" 5867332fb9Smrg fi 5967332fb9Smrg ;; 6067332fb9Smrg *) 6167332fb9Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 6267332fb9Smrg echo "mkdir -m $dirmode -p -- $*" 6367332fb9Smrg exec mkdir -m "$dirmode" -p -- "$@" 6467332fb9Smrg fi 6567332fb9Smrg ;; 6667332fb9Smrgesac 6767332fb9Smrg 6867332fb9Smrgfor file 6967332fb9Smrgdo 7067332fb9Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 7167332fb9Smrg shift 7267332fb9Smrg 7367332fb9Smrg pathcomp= 7467332fb9Smrg for d 7567332fb9Smrg do 7667332fb9Smrg pathcomp="$pathcomp$d" 7767332fb9Smrg case $pathcomp in 7867332fb9Smrg -*) pathcomp=./$pathcomp ;; 7967332fb9Smrg esac 8067332fb9Smrg 8167332fb9Smrg if test ! -d "$pathcomp"; then 8267332fb9Smrg echo "mkdir $pathcomp" 8367332fb9Smrg 8467332fb9Smrg mkdir "$pathcomp" || lasterr=$? 8567332fb9Smrg 8667332fb9Smrg if test ! -d "$pathcomp"; then 8767332fb9Smrg errstatus=$lasterr 8867332fb9Smrg else 8967332fb9Smrg if test ! -z "$dirmode"; then 9067332fb9Smrg echo "chmod $dirmode $pathcomp" 9167332fb9Smrg lasterr="" 9267332fb9Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 9367332fb9Smrg 9467332fb9Smrg if test ! -z "$lasterr"; then 9567332fb9Smrg errstatus=$lasterr 9667332fb9Smrg fi 9767332fb9Smrg fi 9867332fb9Smrg fi 9967332fb9Smrg fi 10067332fb9Smrg 10167332fb9Smrg pathcomp="$pathcomp/" 10267332fb9Smrg done 10367332fb9Smrgdone 10467332fb9Smrg 10567332fb9Smrgexit $errstatus 10667332fb9Smrg 10767332fb9Smrg# Local Variables: 10867332fb9Smrg# mode: shell-script 10967332fb9Smrg# sh-indentation: 2 11067332fb9Smrg# End: 11167332fb9Smrg# mkinstalldirs ends here 112