/usr/share/shtool/sh.mdate 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 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | ##
## mdate -- Pretty-print modification time of a file or dir
## Copyright (c) 1995-1997 Free Software Foundation, Inc.
## Copyright (c) 1998-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="mdate"
str_usage="[-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits] [-f|--field-sep <str>] [-o|--order <spec>] <path>"
arg_spec="1="
opt_spec="n.z.s.d.f:o:"
opt_alias="n:newline,z:zero,s:shorten,d:digits,f:field-sep,o:order"
opt_n=no
opt_z=no
opt_s=no
opt_d=no
opt_f=" "
opt_o="dmy"
. ./sh.common
fod="$1"
case "$opt_o" in
[dmy][dmy][dmy] )
;;
* ) echo "$msgprefix:Error: invalid argument to option \`-o': $opt_o" 1>&2
shtool_exit 1
;;
esac
if [ ! -r "$fod" ]; then
echo "$msgprefix:Error: file or directory not found: $fod" 1>&2
shtool_exit 1
fi
# GNU ls changes its time format in response to the TIME_STYLE
# variable. Since we cannot assume "unset" works, revert this
# variable to its documented default.
if [ ".$TIME_STYLE" != . ]; then
TIME_STYLE=posix-long-iso
export TIME_STYLE
fi
# get the extended ls output of the file or directory.
if /bin/ls -L /dev/null >/dev/null 2>&1; then
set - x`/bin/ls -L -l -d $fod`
else
set - x`/bin/ls -l -d $fod`
fi
# The month is at least the fourth argument
# (3 shifts here, the next inside the loop).
shift; shift; shift
# Find the month. Next argument is day, followed by the year or time.
month=""
while [ ".$month" = . ]; do
shift
case $1 in
Jan) month=January; nummonth=1 ;;
Feb) month=February; nummonth=2 ;;
Mar) month=March; nummonth=3 ;;
Apr) month=April; nummonth=4 ;;
May) month=May; nummonth=5 ;;
Jun) month=June; nummonth=6 ;;
Jul) month=July; nummonth=7 ;;
Aug) month=August; nummonth=8 ;;
Sep) month=September; nummonth=9 ;;
Oct) month=October; nummonth=10 ;;
Nov) month=November; nummonth=11 ;;
Dec) month=December; nummonth=12 ;;
esac
done
day="$2"
year="$3"
# We finally have to deal with the problem that the "ls" output
# gives either the time of the day or the year.
case $year in
*:*)
this_year=`date '+%Y' 2>/dev/null`
if [ ".$this_year" = . ]; then
this_year=`date '+%y'`
case $this_year in
[5-9][0-9]) this_year="19$this_year" ;;
[0-4][0-9]) this_year="20$this_year" ;;
esac
fi
# for the following months of the last year the time notation
# is usually also used for files modified in the last year.
this_month=`date '+%m'`
if (expr $nummonth \> $this_month) >/dev/null; then
this_year=`expr $this_year - 1`
fi
year="$this_year"
;;
esac
# Optionally fill day and month with leeding zeros
if [ ".$opt_z" = .yes ]; then
case $day in
[0-9][0-9] ) ;;
[0-9] ) day="0$day" ;;
esac
case $nummonth in
[0-9][0-9] ) ;;
[0-9] ) nummonth="0$nummonth" ;;
esac
fi
# Optionally use digits for month
if [ ".$opt_d" = .yes ]; then
month="$nummonth"
fi
# Optionally shorten the month name to three characters
if [ ".$opt_s" = .yes ]; then
month=`echo $month | cut -c1-3`
fi
# Output the resulting date string
echo dummy | awk '{
for (i = 0; i < 3; i++) {
now = substr(order, 1, 1);
order = substr(order, 2);
if (now == "d")
out = day;
else if (now == "m")
out = month;
else if (now == "y")
out = year;
if (i < 2)
printf("%s%s", out, field);
else
printf("%s", out);
}
if (newline != "yes")
printf("\n");
}' "day=$day" "month=$month" "year=$year" \
"field=$opt_f" "order=$opt_o" "newline=$opt_n"
shtool_exit 0
##
## manual page
##
=pod
=head1 NAME
B<shtool-mdate> - B<GNU shtool> pretty-print last modification time
=head1 SYNOPSIS
B<shtool mdate>
[B<-n>|B<--newline>]
[B<-z>|B<--zero>]
[B<-s>|B<--shorten>]
[B<-d>|B<--digits>]
[B<-f>|B<--field-sep> I<str>]
[B<-o>|B<--order> I<spec>]
I<path>
=head1 DESCRIPTION
This command pretty-prints the last modification time of a given file or
directory I<path>, while still allowing one to specify the format of the
date to display.
=head1 OPTIONS
The following command line options are available.
=over 4
=item B<-n>, B<--newline>
By default, output is written to F<stdout> followed by a "newline"
(ASCII character 0x0a). If option B<-n> is used, this newline character
is omitted.
=item B<-z>, B<--zero>
Pads numeric day and numeric month with a leading zero. Default is to
have variable width.
=item B<-s>, B<--shorten>
Shortens the name of the month to a english three character
abbreviation. Default is full english name. This option is silently
ignored when combined with B<-d>.
=item B<-d>, B<--digits>
Use digits for month. Default is to use a english name.
=item B<-f>, B<--field-sep> I<str>
Field separator string between the day month year tripple. Default is a
single space character.
=item B<-o>, B<--order> I<spec>
Specifies order of the day month year elements within the tripple. Each
element represented as a single character out of ``C<d>'', ``C<m>'' and
``C<y>''. The default for I<spec> is ``C<dmy>''.
=back
=head1 EXAMPLE
# shell script
shtool mdate -n /
shtool mdate -f '/' -z -d -o ymd foo.txt
shtool mdate -f '-' -s foo.txt
=head1 HISTORY
The B<GNU shtool> B<mdate> command was originally written by
Ulrich Drepper in 1995 and revised by Ralf S. Engelschall
E<lt>rse@engelschall.comE<gt> in 1998 for inclusion into B<GNU shtool>.
=head1 SEE ALSO
shtool(1), date(1), ls(1).
=cut
|