How to compare file timestamps in bash?
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" ]
Related videos on Youtube
![Admin](/assets/logo_square_200-5d0d61d6853298bd2a4fe063103715b4daf2819fc21225efa21dfb93e61952ea.png)
Admin
Updated on September 17, 2022Comments
-
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 about 14 years
[
is a test command -- see the "CONDITIONAL EXPRESSIONS" section of thebash
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 about 14 years@Doug Harris +1 for the more complete explanation about the topic.
-
joaquin over 4 yearsThe parentheses are superfluous. They force the test to be run in a subshell. The square brackets with space around them are sufficient.