看来-newer
测试并不像我想要的那么准确。使用ls -lt
我得到正确的排序顺序:
-rw-r--r--@ 1 p staff 48 Jan 26 14:42 foo.gdb
-rw-r--r--@ 1 p staff 328971 Jan 26 14:42 foo.pdf
-rw-r--r--@ 1 p staff 3133 Dec 14 05:52 foo.tex
但使用-newer
测试结果:
../isNewer.sh foo.gdb foo.pdf
File 1 is older than file 2
../isNewer.sh foo.pdf foo.gdb
File 1 is older than file 2
哪里../isNewer.sh
#!/bin/bash
if [ $1 -nt $2 ]; then
echo "File 1 is newer than file 2"
else
echo "File 1 is older than file 2"
fi
输出stat
:
stat foo.pdf foo.gdb
根据评论中的要求, (手动添加空格以提高可读性)的输出是:
16777217 255313605 -rw-r--r-- 1 p staff 0 328971 "Jan 26 21:28:06 2017" "Jan 26 14:42:16 2017" "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" 4096 648 0 foo.pdf
16777217 255313604 -rw-r--r-- 1 p staff 0 48 "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" 4096 8 0 foo.gdb
问题:
- 测试的准确性是多少
-newer
>? - 是否有一种替代方法可以对一个文件比另一个文件更新进行更精细的测试(可以比较到秒而不是分钟)?
平台:
- MacOS 与 bash 3.2.53(1)-release
答案1
操作-nt
员在比较两个文件的年龄时将使用上次修改的时间。
根据您的stat
输出,本示例中的两个文件具有完全相同的修改时间(精确到第二个),Jan 26 14:42:16 2017
(输出中的第二个时间戳stat
)。
因此,一个文件并不比另一个文件“新”,并且无论测试执行的顺序如何,测试都会返回 false。