156f6b22bSmrg#! /bin/sh 256f6b22bSmrg# mkinstalldirs --- make directory hierarchy 356f6b22bSmrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 456f6b22bSmrg# Created: 1993-05-16 556f6b22bSmrg# Public domain 656f6b22bSmrg 756f6b22bSmrgerrstatus=0 856f6b22bSmrgdirmode="" 956f6b22bSmrg 1056f6b22bSmrgusage="\ 1156f6b22bSmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 1256f6b22bSmrg 1356f6b22bSmrg# process command line arguments 1456f6b22bSmrgwhile test $# -gt 0 ; do 1556f6b22bSmrg case $1 in 1656f6b22bSmrg -h | --help | --h*) # -h for help 1756f6b22bSmrg echo "$usage" 1>&2 1856f6b22bSmrg exit 0 1956f6b22bSmrg ;; 2056f6b22bSmrg -m) # -m PERM arg 2156f6b22bSmrg shift 2256f6b22bSmrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 2356f6b22bSmrg dirmode=$1 2456f6b22bSmrg shift 2556f6b22bSmrg ;; 2656f6b22bSmrg --) # stop option processing 2756f6b22bSmrg shift 2856f6b22bSmrg break 2956f6b22bSmrg ;; 3056f6b22bSmrg -*) # unknown option 3156f6b22bSmrg echo "$usage" 1>&2 3256f6b22bSmrg exit 1 3356f6b22bSmrg ;; 3456f6b22bSmrg *) # first non-opt arg 3556f6b22bSmrg break 3656f6b22bSmrg ;; 3756f6b22bSmrg esac 3856f6b22bSmrgdone 3956f6b22bSmrg 4056f6b22bSmrgfor file 4156f6b22bSmrgdo 4256f6b22bSmrg if test -d "$file"; then 4356f6b22bSmrg shift 4456f6b22bSmrg else 4556f6b22bSmrg break 4656f6b22bSmrg fi 4756f6b22bSmrgdone 4856f6b22bSmrg 4956f6b22bSmrgcase $# in 5056f6b22bSmrg 0) exit 0 ;; 5156f6b22bSmrgesac 5256f6b22bSmrg 5356f6b22bSmrgcase $dirmode in 5456f6b22bSmrg '') 5556f6b22bSmrg if mkdir -p -- . 2>/dev/null; then 5656f6b22bSmrg echo "mkdir -p -- $*" 5756f6b22bSmrg exec mkdir -p -- "$@" 5856f6b22bSmrg fi 5956f6b22bSmrg ;; 6056f6b22bSmrg *) 6156f6b22bSmrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 6256f6b22bSmrg echo "mkdir -m $dirmode -p -- $*" 6356f6b22bSmrg exec mkdir -m "$dirmode" -p -- "$@" 6456f6b22bSmrg fi 6556f6b22bSmrg ;; 6656f6b22bSmrgesac 6756f6b22bSmrg 6856f6b22bSmrgfor file 6956f6b22bSmrgdo 7056f6b22bSmrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 7156f6b22bSmrg shift 7256f6b22bSmrg 7356f6b22bSmrg pathcomp= 7456f6b22bSmrg for d 7556f6b22bSmrg do 7656f6b22bSmrg pathcomp="$pathcomp$d" 7756f6b22bSmrg case $pathcomp in 7856f6b22bSmrg -*) pathcomp=./$pathcomp ;; 7956f6b22bSmrg esac 8056f6b22bSmrg 8156f6b22bSmrg if test ! -d "$pathcomp"; then 8256f6b22bSmrg echo "mkdir $pathcomp" 8356f6b22bSmrg 8456f6b22bSmrg mkdir "$pathcomp" || lasterr=$? 8556f6b22bSmrg 8656f6b22bSmrg if test ! -d "$pathcomp"; then 8756f6b22bSmrg errstatus=$lasterr 8856f6b22bSmrg else 8956f6b22bSmrg if test ! -z "$dirmode"; then 9056f6b22bSmrg echo "chmod $dirmode $pathcomp" 9156f6b22bSmrg lasterr="" 9256f6b22bSmrg chmod "$dirmode" "$pathcomp" || lasterr=$? 9356f6b22bSmrg 9456f6b22bSmrg if test ! -z "$lasterr"; then 9556f6b22bSmrg errstatus=$lasterr 9656f6b22bSmrg fi 9756f6b22bSmrg fi 9856f6b22bSmrg fi 9956f6b22bSmrg fi 10056f6b22bSmrg 10156f6b22bSmrg pathcomp="$pathcomp/" 10256f6b22bSmrg done 10356f6b22bSmrgdone 10456f6b22bSmrg 10556f6b22bSmrgexit $errstatus 10656f6b22bSmrg 10756f6b22bSmrg# Local Variables: 10856f6b22bSmrg# mode: shell-script 10956f6b22bSmrg# sh-indentation: 2 11056f6b22bSmrg# End: 11156f6b22bSmrg# mkinstalldirs ends here 112