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