1*8044SWilliam.Kucharski@Sun.COM#!/bin/sh 2*8044SWilliam.Kucharski@Sun.COM# Get modification time of a file or directory and pretty-print it. 3*8044SWilliam.Kucharski@Sun.COM 4*8044SWilliam.Kucharski@Sun.COMscriptversion=2004-12-08.12 5*8044SWilliam.Kucharski@Sun.COM 6*8044SWilliam.Kucharski@Sun.COM# Copyright (C) 1995, 1996, 1997, 2003, 2004 Free Software Foundation, Inc. 7*8044SWilliam.Kucharski@Sun.COM# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 8*8044SWilliam.Kucharski@Sun.COM# 9*8044SWilliam.Kucharski@Sun.COM# This program is free software; you can redistribute it and/or modify 10*8044SWilliam.Kucharski@Sun.COM# it under the terms of the GNU General Public License as published by 11*8044SWilliam.Kucharski@Sun.COM# the Free Software Foundation; either version 2, or (at your option) 12*8044SWilliam.Kucharski@Sun.COM# any later version. 13*8044SWilliam.Kucharski@Sun.COM# 14*8044SWilliam.Kucharski@Sun.COM# This program is distributed in the hope that it will be useful, 15*8044SWilliam.Kucharski@Sun.COM# but WITHOUT ANY WARRANTY; without even the implied warranty of 16*8044SWilliam.Kucharski@Sun.COM# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*8044SWilliam.Kucharski@Sun.COM# GNU General Public License for more details. 18*8044SWilliam.Kucharski@Sun.COM# 19*8044SWilliam.Kucharski@Sun.COM# You should have received a copy of the GNU General Public License 20*8044SWilliam.Kucharski@Sun.COM# along with this program; if not, write to the Free Software Foundation, 21*8044SWilliam.Kucharski@Sun.COM# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 22*8044SWilliam.Kucharski@Sun.COM 23*8044SWilliam.Kucharski@Sun.COM# As a special exception to the GNU General Public License, if you 24*8044SWilliam.Kucharski@Sun.COM# distribute this file as part of a program that contains a 25*8044SWilliam.Kucharski@Sun.COM# configuration script generated by Autoconf, you may include it under 26*8044SWilliam.Kucharski@Sun.COM# the same distribution terms that you use for the rest of that program. 27*8044SWilliam.Kucharski@Sun.COM 28*8044SWilliam.Kucharski@Sun.COM# This file is maintained in Automake, please report 29*8044SWilliam.Kucharski@Sun.COM# bugs to <bug-automake@gnu.org> or send patches to 30*8044SWilliam.Kucharski@Sun.COM# <automake-patches@gnu.org>. 31*8044SWilliam.Kucharski@Sun.COM 32*8044SWilliam.Kucharski@Sun.COMcase $1 in 33*8044SWilliam.Kucharski@Sun.COM '') 34*8044SWilliam.Kucharski@Sun.COM echo "$0: No file. Try \`$0 --help' for more information." 1>&2 35*8044SWilliam.Kucharski@Sun.COM exit 1; 36*8044SWilliam.Kucharski@Sun.COM ;; 37*8044SWilliam.Kucharski@Sun.COM -h | --h*) 38*8044SWilliam.Kucharski@Sun.COM cat <<\EOF 39*8044SWilliam.Kucharski@Sun.COMUsage: mdate-sh [--help] [--version] FILE 40*8044SWilliam.Kucharski@Sun.COM 41*8044SWilliam.Kucharski@Sun.COMPretty-print the modification time of FILE. 42*8044SWilliam.Kucharski@Sun.COM 43*8044SWilliam.Kucharski@Sun.COMReport bugs to <bug-automake@gnu.org>. 44*8044SWilliam.Kucharski@Sun.COMEOF 45*8044SWilliam.Kucharski@Sun.COM exit 0 46*8044SWilliam.Kucharski@Sun.COM ;; 47*8044SWilliam.Kucharski@Sun.COM -v | --v*) 48*8044SWilliam.Kucharski@Sun.COM echo "mdate-sh $scriptversion" 49*8044SWilliam.Kucharski@Sun.COM exit 0 50*8044SWilliam.Kucharski@Sun.COM ;; 51*8044SWilliam.Kucharski@Sun.COMesac 52*8044SWilliam.Kucharski@Sun.COM 53*8044SWilliam.Kucharski@Sun.COM# Prevent date giving response in another language. 54*8044SWilliam.Kucharski@Sun.COMLANG=C 55*8044SWilliam.Kucharski@Sun.COMexport LANG 56*8044SWilliam.Kucharski@Sun.COMLC_ALL=C 57*8044SWilliam.Kucharski@Sun.COMexport LC_ALL 58*8044SWilliam.Kucharski@Sun.COMLC_TIME=C 59*8044SWilliam.Kucharski@Sun.COMexport LC_TIME 60*8044SWilliam.Kucharski@Sun.COM 61*8044SWilliam.Kucharski@Sun.COMsave_arg1="$1" 62*8044SWilliam.Kucharski@Sun.COM 63*8044SWilliam.Kucharski@Sun.COM# Find out how to get the extended ls output of a file or directory. 64*8044SWilliam.Kucharski@Sun.COMif ls -L /dev/null 1>/dev/null 2>&1; then 65*8044SWilliam.Kucharski@Sun.COM ls_command='ls -L -l -d' 66*8044SWilliam.Kucharski@Sun.COMelse 67*8044SWilliam.Kucharski@Sun.COM ls_command='ls -l -d' 68*8044SWilliam.Kucharski@Sun.COMfi 69*8044SWilliam.Kucharski@Sun.COM 70*8044SWilliam.Kucharski@Sun.COM# A `ls -l' line looks as follows on OS/2. 71*8044SWilliam.Kucharski@Sun.COM# drwxrwx--- 0 Aug 11 2001 foo 72*8044SWilliam.Kucharski@Sun.COM# This differs from Unix, which adds ownership information. 73*8044SWilliam.Kucharski@Sun.COM# drwxrwx--- 2 root root 4096 Aug 11 2001 foo 74*8044SWilliam.Kucharski@Sun.COM# 75*8044SWilliam.Kucharski@Sun.COM# To find the date, we split the line on spaces and iterate on words 76*8044SWilliam.Kucharski@Sun.COM# until we find a month. This cannot work with files whose owner is a 77*8044SWilliam.Kucharski@Sun.COM# user named `Jan', or `Feb', etc. However, it's unlikely that `/' 78*8044SWilliam.Kucharski@Sun.COM# will be owned by a user whose name is a month. So we first look at 79*8044SWilliam.Kucharski@Sun.COM# the extended ls output of the root directory to decide how many 80*8044SWilliam.Kucharski@Sun.COM# words should be skipped to get the date. 81*8044SWilliam.Kucharski@Sun.COM 82*8044SWilliam.Kucharski@Sun.COM# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. 83*8044SWilliam.Kucharski@Sun.COMset x`ls -l -d /` 84*8044SWilliam.Kucharski@Sun.COM 85*8044SWilliam.Kucharski@Sun.COM# Find which argument is the month. 86*8044SWilliam.Kucharski@Sun.COMmonth= 87*8044SWilliam.Kucharski@Sun.COMcommand= 88*8044SWilliam.Kucharski@Sun.COMuntil test $month 89*8044SWilliam.Kucharski@Sun.COMdo 90*8044SWilliam.Kucharski@Sun.COM shift 91*8044SWilliam.Kucharski@Sun.COM # Add another shift to the command. 92*8044SWilliam.Kucharski@Sun.COM command="$command shift;" 93*8044SWilliam.Kucharski@Sun.COM case $1 in 94*8044SWilliam.Kucharski@Sun.COM Jan) month=January; nummonth=1;; 95*8044SWilliam.Kucharski@Sun.COM Feb) month=February; nummonth=2;; 96*8044SWilliam.Kucharski@Sun.COM Mar) month=March; nummonth=3;; 97*8044SWilliam.Kucharski@Sun.COM Apr) month=April; nummonth=4;; 98*8044SWilliam.Kucharski@Sun.COM May) month=May; nummonth=5;; 99*8044SWilliam.Kucharski@Sun.COM Jun) month=June; nummonth=6;; 100*8044SWilliam.Kucharski@Sun.COM Jul) month=July; nummonth=7;; 101*8044SWilliam.Kucharski@Sun.COM Aug) month=August; nummonth=8;; 102*8044SWilliam.Kucharski@Sun.COM Sep) month=September; nummonth=9;; 103*8044SWilliam.Kucharski@Sun.COM Oct) month=October; nummonth=10;; 104*8044SWilliam.Kucharski@Sun.COM Nov) month=November; nummonth=11;; 105*8044SWilliam.Kucharski@Sun.COM Dec) month=December; nummonth=12;; 106*8044SWilliam.Kucharski@Sun.COM esac 107*8044SWilliam.Kucharski@Sun.COMdone 108*8044SWilliam.Kucharski@Sun.COM 109*8044SWilliam.Kucharski@Sun.COM# Get the extended ls output of the file or directory. 110*8044SWilliam.Kucharski@Sun.COMset x`eval "$ls_command \"\$save_arg1\""` 111*8044SWilliam.Kucharski@Sun.COM 112*8044SWilliam.Kucharski@Sun.COM# Remove all preceding arguments 113*8044SWilliam.Kucharski@Sun.COMeval $command 114*8044SWilliam.Kucharski@Sun.COM 115*8044SWilliam.Kucharski@Sun.COM# Get the month. Next argument is day, followed by the year or time. 116*8044SWilliam.Kucharski@Sun.COMcase $1 in 117*8044SWilliam.Kucharski@Sun.COM Jan) month=January; nummonth=1;; 118*8044SWilliam.Kucharski@Sun.COM Feb) month=February; nummonth=2;; 119*8044SWilliam.Kucharski@Sun.COM Mar) month=March; nummonth=3;; 120*8044SWilliam.Kucharski@Sun.COM Apr) month=April; nummonth=4;; 121*8044SWilliam.Kucharski@Sun.COM May) month=May; nummonth=5;; 122*8044SWilliam.Kucharski@Sun.COM Jun) month=June; nummonth=6;; 123*8044SWilliam.Kucharski@Sun.COM Jul) month=July; nummonth=7;; 124*8044SWilliam.Kucharski@Sun.COM Aug) month=August; nummonth=8;; 125*8044SWilliam.Kucharski@Sun.COM Sep) month=September; nummonth=9;; 126*8044SWilliam.Kucharski@Sun.COM Oct) month=October; nummonth=10;; 127*8044SWilliam.Kucharski@Sun.COM Nov) month=November; nummonth=11;; 128*8044SWilliam.Kucharski@Sun.COM Dec) month=December; nummonth=12;; 129*8044SWilliam.Kucharski@Sun.COMesac 130*8044SWilliam.Kucharski@Sun.COM 131*8044SWilliam.Kucharski@Sun.COMday=$2 132*8044SWilliam.Kucharski@Sun.COM 133*8044SWilliam.Kucharski@Sun.COM# Here we have to deal with the problem that the ls output gives either 134*8044SWilliam.Kucharski@Sun.COM# the time of day or the year. 135*8044SWilliam.Kucharski@Sun.COMcase $3 in 136*8044SWilliam.Kucharski@Sun.COM *:*) set `date`; eval year=\$$# 137*8044SWilliam.Kucharski@Sun.COM case $2 in 138*8044SWilliam.Kucharski@Sun.COM Jan) nummonthtod=1;; 139*8044SWilliam.Kucharski@Sun.COM Feb) nummonthtod=2;; 140*8044SWilliam.Kucharski@Sun.COM Mar) nummonthtod=3;; 141*8044SWilliam.Kucharski@Sun.COM Apr) nummonthtod=4;; 142*8044SWilliam.Kucharski@Sun.COM May) nummonthtod=5;; 143*8044SWilliam.Kucharski@Sun.COM Jun) nummonthtod=6;; 144*8044SWilliam.Kucharski@Sun.COM Jul) nummonthtod=7;; 145*8044SWilliam.Kucharski@Sun.COM Aug) nummonthtod=8;; 146*8044SWilliam.Kucharski@Sun.COM Sep) nummonthtod=9;; 147*8044SWilliam.Kucharski@Sun.COM Oct) nummonthtod=10;; 148*8044SWilliam.Kucharski@Sun.COM Nov) nummonthtod=11;; 149*8044SWilliam.Kucharski@Sun.COM Dec) nummonthtod=12;; 150*8044SWilliam.Kucharski@Sun.COM esac 151*8044SWilliam.Kucharski@Sun.COM # For the first six month of the year the time notation can also 152*8044SWilliam.Kucharski@Sun.COM # be used for files modified in the last year. 153*8044SWilliam.Kucharski@Sun.COM if (expr $nummonth \> $nummonthtod) > /dev/null; 154*8044SWilliam.Kucharski@Sun.COM then 155*8044SWilliam.Kucharski@Sun.COM year=`expr $year - 1` 156*8044SWilliam.Kucharski@Sun.COM fi;; 157*8044SWilliam.Kucharski@Sun.COM *) year=$3;; 158*8044SWilliam.Kucharski@Sun.COMesac 159*8044SWilliam.Kucharski@Sun.COM 160*8044SWilliam.Kucharski@Sun.COM# The result. 161*8044SWilliam.Kucharski@Sun.COMecho $day $month $year 162*8044SWilliam.Kucharski@Sun.COM 163*8044SWilliam.Kucharski@Sun.COM# Local Variables: 164*8044SWilliam.Kucharski@Sun.COM# mode: shell-script 165*8044SWilliam.Kucharski@Sun.COM# sh-indentation: 2 166*8044SWilliam.Kucharski@Sun.COM# eval: (add-hook 'write-file-hooks 'time-stamp) 167*8044SWilliam.Kucharski@Sun.COM# time-stamp-start: "scriptversion=" 168*8044SWilliam.Kucharski@Sun.COM# time-stamp-format: "%:y-%02m-%02d.%02H" 169*8044SWilliam.Kucharski@Sun.COM# time-stamp-end: "$" 170*8044SWilliam.Kucharski@Sun.COM# End: 171