mkinstalldirs revision 98049353
198049353Smrg#! /bin/sh 298049353Smrg# mkinstalldirs --- make directory hierarchy 398049353Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 498049353Smrg# Created: 1993-05-16 598049353Smrg# Public domain 698049353Smrg 798049353Smrgerrstatus=0 898049353Smrgdirmode="" 998049353Smrg 1098049353Smrgusage="\ 1198049353SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 1298049353Smrg 1398049353Smrg# process command line arguments 1498049353Smrgwhile test $# -gt 0 ; do 1598049353Smrg case $1 in 1698049353Smrg -h | --help | --h*) # -h for help 1798049353Smrg echo "$usage" 1>&2 1898049353Smrg exit 0 1998049353Smrg ;; 2098049353Smrg -m) # -m PERM arg 2198049353Smrg shift 2298049353Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 2398049353Smrg dirmode=$1 2498049353Smrg shift 2598049353Smrg ;; 2698049353Smrg --) # stop option processing 2798049353Smrg shift 2898049353Smrg break 2998049353Smrg ;; 3098049353Smrg -*) # unknown option 3198049353Smrg echo "$usage" 1>&2 3298049353Smrg exit 1 3398049353Smrg ;; 3498049353Smrg *) # first non-opt arg 3598049353Smrg break 3698049353Smrg ;; 3798049353Smrg esac 3898049353Smrgdone 3998049353Smrg 4098049353Smrgfor file 4198049353Smrgdo 4298049353Smrg if test -d "$file"; then 4398049353Smrg shift 4498049353Smrg else 4598049353Smrg break 4698049353Smrg fi 4798049353Smrgdone 4898049353Smrg 4998049353Smrgcase $# in 5098049353Smrg 0) exit 0 ;; 5198049353Smrgesac 5298049353Smrg 5398049353Smrgcase $dirmode in 5498049353Smrg '') 5598049353Smrg if mkdir -p -- . 2>/dev/null; then 5698049353Smrg echo "mkdir -p -- $*" 5798049353Smrg exec mkdir -p -- "$@" 5898049353Smrg fi 5998049353Smrg ;; 6098049353Smrg *) 6198049353Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 6298049353Smrg echo "mkdir -m $dirmode -p -- $*" 6398049353Smrg exec mkdir -m "$dirmode" -p -- "$@" 6498049353Smrg fi 6598049353Smrg ;; 6698049353Smrgesac 6798049353Smrg 6898049353Smrgfor file 6998049353Smrgdo 7098049353Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 7198049353Smrg shift 7298049353Smrg 7398049353Smrg pathcomp= 7498049353Smrg for d 7598049353Smrg do 7698049353Smrg pathcomp="$pathcomp$d" 7798049353Smrg case $pathcomp in 7898049353Smrg -*) pathcomp=./$pathcomp ;; 7998049353Smrg esac 8098049353Smrg 8198049353Smrg if test ! -d "$pathcomp"; then 8298049353Smrg echo "mkdir $pathcomp" 8398049353Smrg 8498049353Smrg mkdir "$pathcomp" || lasterr=$? 8598049353Smrg 8698049353Smrg if test ! -d "$pathcomp"; then 8798049353Smrg errstatus=$lasterr 8898049353Smrg else 8998049353Smrg if test ! -z "$dirmode"; then 9098049353Smrg echo "chmod $dirmode $pathcomp" 9198049353Smrg lasterr="" 9298049353Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 9398049353Smrg 9498049353Smrg if test ! -z "$lasterr"; then 9598049353Smrg errstatus=$lasterr 9698049353Smrg fi 9798049353Smrg fi 9898049353Smrg fi 9998049353Smrg fi 10098049353Smrg 10198049353Smrg pathcomp="$pathcomp/" 10298049353Smrg done 10398049353Smrgdone 10498049353Smrg 10598049353Smrgexit $errstatus 10698049353Smrg 10798049353Smrg# Local Variables: 10898049353Smrg# mode: shell-script 10998049353Smrg# sh-indentation: 2 11098049353Smrg# End: 11198049353Smrg# mkinstalldirs ends here 112