如何在bash中比较文件时间戳?


16

如何比较两个文件的时间戳?

我试过了,但是没有用:

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

我按顺序打印了两个时间戳,这给了我

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

所以基本上,如果比较不起作用,我猜。或者,如果有除我正在做的事情之外的其他好方法,请告诉我。我必须改变什么?


1
您的代码在方括号内需要空格。
乔纳森·勒夫勒

与用于比较时间戳的内置机制相比,测试机制非常复杂。
乔纳森·莱夫勒

Answers:


26

比较时间戳的运算符为:

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

助记符很容易:“比...新”和“比...大”。


5

这是因为缺少一些空格。[是一个命令,因此它周围必须有空格,并且]是一个特殊参数来告诉其命令行的结尾。因此,您的测试行应如下所示:

if [ $file1time -gt $file2time ];

3
[是一个测试命令-请参见bash手册页的“条件表达式”部分。在/usr/bin/test和中还有一个独立的可执行文件/usr/bin/[,但是如果您使用bash而不是完整路径,那么您使用的是内置的shell。
道格·哈里斯

@Doug Harris +1以获得有关该主题的更完整说明。
戈德森,2010年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.