mkinstalldirs revision 264fa531
1264fa531Smrg#! /bin/sh 2264fa531Smrg# mkinstalldirs --- make directory hierarchy 3264fa531Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 4264fa531Smrg# Created: 1993-05-16 5264fa531Smrg# Public domain 6264fa531Smrg 7264fa531Smrgerrstatus=0 8264fa531Smrgdirmode="" 9264fa531Smrg 10264fa531Smrgusage="\ 11264fa531SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 12264fa531Smrg 13264fa531Smrg# process command line arguments 14264fa531Smrgwhile test $# -gt 0 ; do 15264fa531Smrg case $1 in 16264fa531Smrg -h | --help | --h*) # -h for help 17264fa531Smrg echo "$usage" 1>&2 18264fa531Smrg exit 0 19264fa531Smrg ;; 20264fa531Smrg -m) # -m PERM arg 21264fa531Smrg shift 22264fa531Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 23264fa531Smrg dirmode=$1 24264fa531Smrg shift 25264fa531Smrg ;; 26264fa531Smrg --) # stop option processing 27264fa531Smrg shift 28264fa531Smrg break 29264fa531Smrg ;; 30264fa531Smrg -*) # unknown option 31264fa531Smrg echo "$usage" 1>&2 32264fa531Smrg exit 1 33264fa531Smrg ;; 34264fa531Smrg *) # first non-opt arg 35264fa531Smrg break 36264fa531Smrg ;; 37264fa531Smrg esac 38264fa531Smrgdone 39264fa531Smrg 40264fa531Smrgfor file 41264fa531Smrgdo 42264fa531Smrg if test -d "$file"; then 43264fa531Smrg shift 44264fa531Smrg else 45264fa531Smrg break 46264fa531Smrg fi 47264fa531Smrgdone 48264fa531Smrg 49264fa531Smrgcase $# in 50264fa531Smrg 0) exit 0 ;; 51264fa531Smrgesac 52264fa531Smrg 53264fa531Smrgcase $dirmode in 54264fa531Smrg '') 55264fa531Smrg if mkdir -p -- . 2>/dev/null; then 56264fa531Smrg echo "mkdir -p -- $*" 57264fa531Smrg exec mkdir -p -- "$@" 58264fa531Smrg fi 59264fa531Smrg ;; 60264fa531Smrg *) 61264fa531Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 62264fa531Smrg echo "mkdir -m $dirmode -p -- $*" 63264fa531Smrg exec mkdir -m "$dirmode" -p -- "$@" 64264fa531Smrg fi 65264fa531Smrg ;; 66264fa531Smrgesac 67264fa531Smrg 68264fa531Smrgfor file 69264fa531Smrgdo 70264fa531Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 71264fa531Smrg shift 72264fa531Smrg 73264fa531Smrg pathcomp= 74264fa531Smrg for d 75264fa531Smrg do 76264fa531Smrg pathcomp="$pathcomp$d" 77264fa531Smrg case $pathcomp in 78264fa531Smrg -*) pathcomp=./$pathcomp ;; 79264fa531Smrg esac 80264fa531Smrg 81264fa531Smrg if test ! -d "$pathcomp"; then 82264fa531Smrg echo "mkdir $pathcomp" 83264fa531Smrg 84264fa531Smrg mkdir "$pathcomp" || lasterr=$? 85264fa531Smrg 86264fa531Smrg if test ! -d "$pathcomp"; then 87264fa531Smrg errstatus=$lasterr 88264fa531Smrg else 89264fa531Smrg if test ! -z "$dirmode"; then 90264fa531Smrg echo "chmod $dirmode $pathcomp" 91264fa531Smrg lasterr="" 92264fa531Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 93264fa531Smrg 94264fa531Smrg if test ! -z "$lasterr"; then 95264fa531Smrg errstatus=$lasterr 96264fa531Smrg fi 97264fa531Smrg fi 98264fa531Smrg fi 99264fa531Smrg fi 100264fa531Smrg 101264fa531Smrg pathcomp="$pathcomp/" 102264fa531Smrg done 103264fa531Smrgdone 104264fa531Smrg 105264fa531Smrgexit $errstatus 106264fa531Smrg 107264fa531Smrg# Local Variables: 108264fa531Smrg# mode: shell-script 109264fa531Smrg# sh-indentation: 2 110264fa531Smrg# End: 111264fa531Smrg# mkinstalldirs ends here 112