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