How to compare file timestamps in bash?

40,863

Solution 1

The operators for comparing time stamps are:

[ $file1 -nt $file2 ]
[ $file1 -ot $file2 ]

The mnemonic is easy: 'newer than' and 'older than'.

Solution 2

This is because of some missing spaces. [ is a command, so it must have spaces around it and the ] is an special parameter to tell it where its comand line ends. So, your test line should look like:

if [ $file1time -gt $file2time ];

Solution 3

if is not magic. It attempts to run the command passed to it, and checks if it has a zero exit status. It also doesn't handle non-existent arguments well, which is why you should quote variables being used in it.

if [ "$file1time" -gt "$file2time" ]
Share:
40,863

Related videos on Youtube

Admin
Author by

Admin

Updated on September 17, 2022

Comments

  • Admin
    Admin almost 2 years

    How do I compare the timestamp of two files?

    I tried this but it doesn't work:

    file1time=`stat -c %Y fil1.txt`
    file2time=`stat -c %Y file2.txt`
    if[$file1time -gt $file2time];
    then
     doSomething
    fi
    

    I printed both the time stamps, in order and it gives me

    1273143480
    1254144394
    ./script.sh: line 13: [1273143480: command not found
    

    So basically if comparison is not working, I guess. Or if there is any other nice way than what I am doing, please let me know. What do I have to change?

  • Doug Harris
    Doug Harris about 14 years
    [ is a test command -- see the "CONDITIONAL EXPRESSIONS" section of the bash man page. There's also a standalone executable in /usr/bin/test and /usr/bin/[, but if you're using bash and not using the full path, yo u're using the shell builtin.
  • sprite
    sprite about 14 years
    @Doug Harris +1 for the more complete explanation about the topic.
  • joaquin
    joaquin over 4 years
    The parentheses are superfluous. They force the test to be run in a subshell. The square brackets with space around them are sufficient.