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