Bash

-newer 測試的準確性

  • January 27, 2017

看來-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多少>?
  • 是否有替代方法可以對一個比另一個文件更新的文件進行更精細的測試(可以比較到第二個而不是分鐘)?

平台:

  • 帶有 bash 3.2.53(1)-release 的 MacOS

-nt操作員在比較兩個文件的年齡時將使用上次修改的時間。

根據您的stat輸出,此範例中的兩個文件具有完全相同的修改時間(精確到秒),Jan 26 14:42:16 2017(輸出中的第二個時間戳stat)。

因此,一個文件並不比另一個“新”,並且無論以何種順序執行測試,測試都會返回 false。

引用自:https://unix.stackexchange.com/questions/340463