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