head 1.20; access; symbols SHTOOL_2_0_8:1.20 SHTOOL_2_0_7:1.19 SHTOOL_2_0_6:1.18 SHTOOL_2_0_5:1.18 SHTOOL_2_0_4:1.18 SHTOOL_2_0_3:1.16 SHTOOL_2_0_2:1.15 SHTOOL_2_0_1:1.14 SHTOOL_2_0_0:1.14 SHTOOL_2_0b3:1.14 SHTOOL_2_0b2:1.14 SHTOOL_2_0b1:1.14 SHTOOL_1_6:1.11.0.2 SHTOOL_1_6_2:1.11 SHTOOL_1_6_1:1.11 SHTOOL_1_6_0:1.11 SHTOOL_1_5:1.10.0.2 SHTOOL_1_5_4:1.10 SHTOOL_1_5_3:1.10 SHTOOL_1_5_2:1.10 SHTOOL_1_5_1:1.10 SHTOOL_1_5_0:1.10 SHTOOL_1_4_9:1.10 SHTOOL_1_4_8:1.10 SHTOOL_1_4_7:1.8 SHTOOL_1_4_6:1.7 SHTOOL_1_4_5:1.7 SHTOOL_1_4_4:1.7 SHTOOL_1_4_3:1.7 SHTOOL_1_4_2:1.7 SHTOOL_1_4_1:1.6 SHTOOL_1_4_0:1.6 SHTOOL_1_3_3:1.5 SHTOOL_1_3_2:1.4 SHTOOL_1_3_1:1.3 SHTOOL_1_3_0:1.3; locks; strict; comment @# @; 1.20 date 2008.04.02.20.13.43; author rse; state Exp; branches; next 1.19; commitid eB5Wirx8MdMyDzXs; 1.19 date 2007.05.19.19.09.39; author rse; state Exp; branches; next 1.18; commitid OPUF1UBbllBTwzis; 1.18 date 2006.02.04.09.59.16; author rse; state Exp; branches; next 1.17; commitid lB7tmkaPKzF8zfkr; 1.17 date 2006.02.04.09.43.25; author rse; state Exp; branches; next 1.16; commitid oWk7BmnyAitJtfkr; 1.16 date 2005.10.02.14.23.12; author rse; state Exp; branches; next 1.15; 1.15 date 2005.06.15.08.14.35; author rse; state Exp; branches; next 1.14; 1.14 date 2004.02.12.16.06.26; author rse; state Exp; branches; next 1.13; 1.13 date 2003.04.04.16.36.01; author rse; state Exp; branches; next 1.12; 1.12 date 2003.02.11.12.56.40; author rse; state Exp; branches; next 1.11; 1.11 date 2001.09.23.10.58.10; author rse; state Exp; branches; next 1.10; 1.10 date 2000.03.12.13.28.24; author rse; state Exp; branches; next 1.9; 1.9 date 2000.03.12.12.46.42; author rse; state Exp; branches; next 1.8; 1.8 date 99.12.24.15.11.23; author rse; state Exp; branches; next 1.7; 1.7 date 99.07.09.15.45.22; author rse; state Exp; branches; next 1.6; 1.6 date 99.07.01.15.02.48; author rse; state Exp; branches; next 1.5; 1.5 date 99.06.29.17.37.34; author rse; state Exp; branches; next 1.4; 1.4 date 99.06.28.15.18.44; author rse; state Exp; branches; next 1.3; 1.3 date 99.06.17.07.35.08; author rse; state Exp; branches; next 1.2; 1.2 date 99.06.15.08.58.49; author rse; state Exp; branches; next 1.1; 1.1 date 99.06.15.08.43.26; author rse; state Exp; branches; next ; desc @@ 1.20 log @adjust copyright for year 2008 @ text @## ## 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 ## ## 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 . ## str_tool="mdate" str_usage="[-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits] [-f|--field-sep ] [-o|--order ] " 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 - B pretty-print last modification time =head1 SYNOPSIS B [B<-n>|B<--newline>] [B<-z>|B<--zero>] [B<-s>|B<--shorten>] [B<-d>|B<--digits>] [B<-f>|B<--field-sep> I] [B<-o>|B<--order> I] I =head1 DESCRIPTION This command pretty-prints the last modification time of a given file or directory I, 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 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 Field separator string between the day month year tripple. Default is a single space character. =item B<-o>, B<--order> I Specifies order of the day month year elements within the tripple. Each element represented as a single character out of ``C'', ``C'' and ``C''. The default for I is ``C''. =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 B command was originally written by Ulrich Drepper in 1995 and revised by Ralf S. Engelschall Erse@@engelschall.comE in 1998 for inclusion into B. =head1 SEE ALSO shtool(1), date(1), ls(1). =cut @ 1.19 log @Adjust copyright for year 2007. @ text @d4 1 a4 1 ## Copyright (c) 1998-2007 Ralf S. Engelschall @ 1.18 log @Remove obsolete LANG/LC_TIME/LC_ALL adjustments in sh.mdate. Submitted by: Mike Frysinger @ text @d4 1 a4 1 ## Copyright (c) 1998-2006 Ralf S. Engelschall @ 1.17 log @Adjust copyright for year 2006 @ text @a48 5 # prevent "date" giving response in another language LANG=C; export LANG LC_ALL=C; export LC_ALL LC_TIME=C; export LC_TIME @ 1.16 log @"shtool mdate" needs to (un|re)set TIME_STYLE, as GNU coreutils' "ls" changes its time format in response to the TIME_STYLE variable. Submitted by: James Rowe @ text @d4 1 a4 1 ## Copyright (c) 1998-2005 Ralf S. Engelschall @ 1.15 log @Adjust copyright for year 2005 @ text @d54 8 @ 1.14 log @Embedded the command documentation from shtool.pod into the individual sh.xxxx scripts and this way split the large shtool(1) manual page into individual manual pages shtool-xxxx(1). Submitted partly by: Thomas Lotterer @ text @d4 1 a4 1 ## Copyright (c) 1998-2004 Ralf S. Engelschall @ 1.13 log @1. Make sure "shtool rotate" does still correctly determine the size of a file if its filename contains whitespaces. 2. Consistently use "/bin/ls" instead of "ls" internally to avoid problems with other "ls" in PATH while still not becoming unportable (because "/bin/ls" is really on every reasonable Unix-style platform the "ls" command). @ text @d4 1 a4 2 ## Originally idea and basis code by Ulrich Drepper ## Enhanced by Ralf S. Engelschall for shtool d151 86 @ 1.12 log @Fixed error exit in all commands by introducing an "shtool_exit" function (which correctly cleans up temporary files) and replacing all "exit" calls with "shtool_exit". THIS THE FIRST TIME INTRODUCED THE USAGE OF A SHELL FUNCTION TO THE SHTOOL CODE. This is known to break on _very_ anchient and broken Bourne-Shell implementations and is considered to be no longer a real problem in the year 2003. Especially there is no alternative way anyway. @ text @d56 2 a57 2 if ls -L /dev/null >/dev/null 2>&1; then set - x`ls -L -l -d $fod` d59 1 a59 1 set - x`ls -l -d $fod` @ 1.11 log @*** empty log message *** @ text @d42 1 a42 1 exit 1 d47 1 a47 1 exit 1 @ 1.10 log @*** empty log message *** @ text @d24 1 a24 1 str_usage="[-n] [-z] [-s] [-d] [-f] [-o] " d27 1 @ 1.9 log @*** empty log message *** @ text @d26 5 a30 1 opt_spec="nzsdf:o:" @ 1.8 log @*** empty log message *** @ text @d25 1 a25 1 arg_spec="1" @ 1.7 log @*** empty log message *** @ text @d26 1 a26 1 opt_spec="nzsdf:!o:!" @ 1.6 log @*** empty log message *** @ text @a0 1 #!/bin/sh @ 1.5 log @*** empty log message *** @ text @d84 1 a84 1 # We finally have to deal with the problem that the "ls" output @ 1.4 log @*** empty log message *** @ text @d35 1 a35 1 [dmy][dmy][dmy] ) d87 1 a87 1 *:*) d96 1 a96 1 # for the following months of the last year the time notation @ 1.3 log @*** empty log message *** @ text @d31 1 a31 1 . sh.common @ 1.2 log @*** empty log message *** @ text @d25 1 a25 1 str_usage="[-n] [-z] [-s] [-d] [-f] [-o] " @ 1.1 log @*** empty log message *** @ text @d3 1 a3 1 ## mdate -- Get modification time of a file or dir and pretty-print it d25 1 a25 1 str_usage="" d27 1 a27 1 opt_spec="szndf:!o:!" d41 4 @