how to compare file modification time in bourne shell script
Mike Moore
mike at x.co.uk
Thu Jul 26 20:27:45 AEST 1990
In article <1990Jul23.233044.2729 at silma.com> aab at silma.UUCP () writes:
>
>I need to compare the modification times of two files in a bourne shell
>script. I would like to do this without writing C code.
>Machine is Sparcstation 1 running SunOS 4.03c
>
>Thus I need a function:
>
>newer file1 file2
>
>that returns 0 if file1 is newer than file2 else returns 1
>
>Can it be done?
Here is a way:
newer() {
file=$1
set `ls -t $1 $2` # func args are now changed
[ $file = $1 ] && return 0 || return 1
}
For those that don't know, the second line is an alternative form of:
if [ $file = $1 ]
then
return 0
else
return 1
fi
Of course, file1 and file2 have to exist, and have to be files.
If you don't want to use set, then:
[ `ls -tC $1 $2 | sed 's/ .*$//'` = $1 ] && return 0 || return 1
And to do the whole thing properly:
newer() {
file=$1
[ ! -f $1 -o ! -f $2 ] && return 2 # error exit
set `ls -dt $1 $2` # func args are changed
[ $file = $1 ] && return 0 || return 1
}
Now file1 and file2 don't have to exist and don't have to be files.
Line #2 in this final version could be changed to two seperate lines:
[ ! -f $1 ] && return 1 # since file2 is newer
[ ! -f $2 ] && return 0 # since file1 is newer
if you want a different effect.
Using this method, then, on most machines, the only program actually read from
disk and executed is ls (some may actually execute the '[').
Happy Bourne Shell!
Mike
--
--------------------------------------------------------------------------
Usual disclaimer..... etc | mike at x.co.uk
True Intelligence is not knowing all the answers, |
it's knowing the right questions. |
More information about the Comp.unix.questions
mailing list