Bash
比較符號連結的時間
我想檢查連結
lnkfile
是否比正常參考文件舊reffile
。bash
test
內置取消引用連結,因此test lnkfile -ot reffile
比較的目標lnkfile
,而不是連結本身。有沒有辦法讓
test
內置不遵循符號連結?否則,我如何比較符號連結的時間?
我認為沒有辦法使用
test
,但您可以使用find
.test "$(find reffile -prune -newer lnkfile)" && command
在這裡,如果早於,
find
則返回輸出。沒有選項等同於. 如果字元串的長度不為零,則為真。因此,如果有來自 的輸出,則執行。lnkfile``reffile``test``test -n``find``command
在評論中,我被要求將這個解決方案與
stat
. 首先,我發現這種stat
方法非常好。我做了一個基準來比較。我重複了幾次測試,交替進行,得到了相似的結果。
$ time (for i in {1..1000}; do test "$(stat --format=%Z a)" -lt "$(stat --format=%Z b)" && echo foo > /dev/null ; done) ================ CPU 101% CPU 104% user 1.264 system 0.942 total 2.108 $ time (for i in {1..1000}; do test "$(find b -newer a)" && echo foo > /dev/null ; done) ================ CPU 104% user 0.693 system 0.526 total 1.164
我看起來
find
幾乎快了一倍,也許是因為它是一個程序而不是兩個stats
?我不確定如何比較它們;如果您能想到其他相關方面,請發表評論。根據以下 Stéphane Chazelas 的評論,還有一些其他差異:
其他區別是:
find
一個是標準的。而stat
一個需要stat
.stat
一個不適用於在同一秒內修改的文件(而應該find
在支持時間戳的亞秒粒度的系統上工作)。既不find
也不stat
支持任意文件名。如果無法
stat()
編輯任何一個文件,您會發現其他差異。