Statistics
| Branch: | Tag: | Revision:

root / mkinstalldirs @ master

History | View | Annotate | Download (1.9 kB)

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