mkdirhier revision bb2e14f3
1bb2e14f3Smrg#!/bin/sh 2bb2e14f3Smrg# $Xorg: mkdirhier.sh,v 1.3 2000/08/17 19:41:53 cpqbld Exp $ 3bb2e14f3Smrg# Courtesy of Paul Eggert 4bb2e14f3Smrg 5bb2e14f3Smrgnewline=' 6bb2e14f3Smrg' 7bb2e14f3SmrgIFS=$newline 8bb2e14f3Smrg 9bb2e14f3Smrgcase ${1--} in 10bb2e14f3Smrg-*) echo >&2 "mkdirhier: usage: mkdirhier directory ..."; exit 1 11bb2e14f3Smrgesac 12bb2e14f3Smrg 13bb2e14f3Smrgstatus= 14bb2e14f3Smrg 15bb2e14f3Smrgfor directory 16bb2e14f3Smrgdo 17bb2e14f3Smrg case $directory in 18bb2e14f3Smrg '') 19bb2e14f3Smrg echo >&2 "mkdirhier: empty directory name" 20bb2e14f3Smrg status=1 21bb2e14f3Smrg continue;; 22bb2e14f3Smrg *"$newline"*) 23bb2e14f3Smrg echo >&2 "mkdirhier: directory name contains a newline: \`\`$directory''" 24bb2e14f3Smrg status=1 25bb2e14f3Smrg continue;; 26bb2e14f3Smrg ///*) prefix=/;; # See Posix 2.3 "path". 27bb2e14f3Smrg //*) prefix=//;; 28bb2e14f3Smrg /*) prefix=/;; 29bb2e14f3Smrg -*) prefix=./;; 30bb2e14f3Smrg *) prefix= 31bb2e14f3Smrg esac 32bb2e14f3Smrg 33bb2e14f3Smrg IFS=/ 34bb2e14f3Smrg set x $directory 35bb2e14f3Smrg case $2 in 36bb2e14f3Smrg */*) # IFS parsing is broken 37bb2e14f3Smrg IFS=' ' 38bb2e14f3Smrg set x `echo $directory | tr / ' '` 39bb2e14f3Smrg ;; 40bb2e14f3Smrg esac 41bb2e14f3Smrg IFS=$newline 42bb2e14f3Smrg shift 43bb2e14f3Smrg 44bb2e14f3Smrg for filename 45bb2e14f3Smrg do 46bb2e14f3Smrg path=$prefix$filename 47bb2e14f3Smrg prefix=$path/ 48bb2e14f3Smrg shift 49bb2e14f3Smrg 50bb2e14f3Smrg test -d "$path" || { 51bb2e14f3Smrg paths=$path 52bb2e14f3Smrg for filename 53bb2e14f3Smrg do 54bb2e14f3Smrg if [ -n "$filename" -a "$filename" != "." ]; then 55bb2e14f3Smrg path=$path/$filename 56bb2e14f3Smrg paths=$paths$newline$path 57bb2e14f3Smrg fi 58bb2e14f3Smrg done 59bb2e14f3Smrg 60bb2e14f3Smrg mkdir $paths || status=$? 61bb2e14f3Smrg 62bb2e14f3Smrg break 63bb2e14f3Smrg } 64bb2e14f3Smrg done 65bb2e14f3Smrg done 66bb2e14f3Smrg 67bb2e14f3Smrgexit $status 68