Bash
-newer 測試的準確性
看來
-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。