/usr/share/shtool/sh.mkdir is in shtool 2.0.8-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | ##
## mkdir -- Make one or more directories
## Copyright (c) 1996-2008 Ralf S. Engelschall <rse@engelschall.com>
##
## This file is part of shtool and free software; you can redistribute
## it and/or modify it under the terms of the GNU General Public
## License as published by the Free Software Foundation; either version
## 2 of the License, or (at your option) any later version.
##
## This file is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
## USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
##
str_tool="mkdir"
str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode <mode>] [-o|--owner <owner>] [-g|--group <group>] <dir> [<dir> ...]"
arg_spec="1+"
opt_spec="t.f.p.m:o:g:"
opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group"
opt_t=no
opt_f=no
opt_p=no
opt_m=""
opt_o=""
opt_g=""
. ./sh.common
errstatus=0
for p in ${1+"$@"}; do
# if the directory already exists...
if [ -d "$p" ]; then
if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then
echo "$msgprefix:Error: directory already exists: $p" 1>&2
errstatus=1
break
else
continue
fi
fi
# if the directory has to be created...
if [ ".$opt_p" = .no ]; then
if [ ".$opt_t" = .yes ]; then
echo "mkdir $p" 1>&2
fi
mkdir $p || errstatus=$?
if [ ".$opt_o" != . ]; then
if [ ".$opt_t" = .yes ]; then
echo "chown $opt_o $p" 1>&2
fi
chown $opt_o $p || errstatus=$?
fi
if [ ".$opt_g" != . ]; then
if [ ".$opt_t" = .yes ]; then
echo "chgrp $opt_g $p" 1>&2
fi
chgrp $opt_g $p || errstatus=$?
fi
if [ ".$opt_m" != . ]; then
if [ ".$opt_t" = .yes ]; then
echo "chmod $opt_m $p" 1>&2
fi
chmod $opt_m $p || errstatus=$?
fi
else
# the smart situation
set fnord `echo ":$p" |\
sed -e 's/^:\//%/' \
-e 's/^://' \
-e 's/\// /g' \
-e 's/^%/\//'`
shift
pathcomp=''
for d in ${1+"$@"}; do
pathcomp="$pathcomp$d"
case "$pathcomp" in
-* ) pathcomp="./$pathcomp" ;;
esac
if [ ! -d "$pathcomp" ]; then
if [ ".$opt_t" = .yes ]; then
echo "mkdir $pathcomp" 1>&2
fi
mkdir $pathcomp || {
_errstatus=$?
[ -d "$pathcomp" ] || errstatus=${_errstatus}
unset _errstatus
}
if [ ".$opt_o" != . ]; then
if [ ".$opt_t" = .yes ]; then
echo "chown $opt_o $pathcomp" 1>&2
fi
chown $opt_o $pathcomp || errstatus=$?
fi
if [ ".$opt_g" != . ]; then
if [ ".$opt_t" = .yes ]; then
echo "chgrp $opt_g $pathcomp" 1>&2
fi
chgrp $opt_g $pathcomp || errstatus=$?
fi
if [ ".$opt_m" != . ]; then
if [ ".$opt_t" = .yes ]; then
echo "chmod $opt_m $pathcomp" 1>&2
fi
chmod $opt_m $pathcomp || errstatus=$?
fi
fi
pathcomp="$pathcomp/"
done
fi
done
shtool_exit $errstatus
##
## manual page
##
=pod
=head1 NAME
B<shtool-mkdir> - B<GNU shtool> mkdir(1) style command
=head1 SYNOPSIS
B<shtool mkdir>
[B<-t>|B<--trace>]
[B<-f>|B<--force>]
[B<-p>|B<--parents>]
[B<-m>|B<--mode> I<mode>]
[B<-o>|B<--owner> I<owner>]
[B<-g>|B<--group> I<group>]
I<dir> [I<dir> ...]
=head1 DESCRIPTION
This is a mkdir(1) style command with additional options and the ability
to be smart if the directory already exists which is important for
installation procedures.
=head1 OPTIONS
The following command line options are available.
=over 4
=item B<-t>, B<--trace>
Shows the actually involved shell commands.
=item B<-f>, B<--force>
Forced continuation and no complaints if directory already exists.
Default is to terminate with error.
=item B<-p>, B<--parents>
Automatic parent directory creation. Default is to only create the last
directory in the path and fail if parents are missing.
=item B<-m>, B<--mode> I<mode>
The directory mode applied to the directory, see chmod(1). Omitting mode
skips this step and leaves the operating system default which is usually
based on umask(1). Some directory modes require superuser privileges to
be set. Default is to stick with operating system defaults.
=item B<-o>, B<--owner> I<owner>
The directory owner name or id applied to the directory, see chown(1).
This option requires superuser privileges to execute. Default is to skip
this step and leave the operating system default which is usually based
on the executing uid or the parent setuid directory.
=item B<-g>, B<--group> I<group>
The directory group name or id applied to the directory, see chgrp(1). This
option requires superuser privileges to execute to the fullest extend,
otherwise the choice of I<group> is limited on most operating systems.
Default is to skip this step and leave the operating system default
which is usually based on the executing gid or the parent setgid
directory.
=back
=head1 EXAMPLE
# Makefile
install:
shtool mkdir -f -p -m 755 $(bindir)
shtool mkdir -f -p -m 755 $(mandir)/man1
:
=head1 HISTORY
The B<GNU shtool> B<mkdir> command was originally written for Public
Domain by Noah Friedman and later revised by Ralf S. Engelschall
E<lt>rse@engelschall.comE<gt> in 1999 for inclusion into B<GNU shtool>.
=head1 SEE ALSO
shtool(1), mkdir(1).
=cut
|