新测试的准确性

新测试的准确性

看来-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。

相关内容