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