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