我想检查链接lnkfile
是否比常规参考文件旧reffile
。
bashtest
内置取消引用链接,因此test lnkfile -ot reffile
比较的目标lnkfile
,而不是链接本身。
有没有办法让test
内置不遵循符号链接?否则,我如何比较符号链接的时间?
我想检查链接lnkfile
是否比常规参考文件旧reffile
。
bashtest
内置取消引用链接,因此test lnkfile -ot reffile
比较的目标lnkfile
,而不是链接本身。
有没有办法让test
内置不遵循符号链接?否则,我如何比较符号链接的时间?
据我所知,bash 不提供任何
-ot
避免取消引用符号链接的(等)版本。你可以做的是使用 GNU stat (它不会取消引用没有 的符号链接
-L
)并以数字方式比较它们的 mtime 时期:我认为没有办法使用
test
,但您可以使用find
.在这里,如果早于,
find
则返回输出。没有选项等同于. 如果字符串的长度不为零,则为真。因此,如果有来自 的输出,则执行。lnkfile
reffile
test
test -n
find
command
在评论中,我被要求将这个解决方案与
stat
. 首先,我发现这种stat
方法非常好。我做了一个基准来比较。我重复了几次测试,交替进行,得到了相似的结果。
我看起来
find
几乎快了一倍,也许是因为它是一个进程而不是两个stats
?我不确定如何比较它们;如果您能想到其他相关方面,请发表评论。根据以下 Stéphane Chazelas 的评论,还有一些其他差异:
使用
zsh
5.6 或更高版本(对于纳秒精度),您只能使用内置函数执行此操作:无论文件名包含哪些字符或非字符,这都会起作用,并将时间戳比较到纳秒。
我们将时间戳作为字符串(纳秒数作为十进制字符串表示,零填充到 30 位)而不是浮点数进行比较,因为运行 GNU/Linux 的 x86_64 PC 的典型双精度浮点数至少没有足够的存储数字的精度,
1548195897.775033155
因此您将无法在相同的 100 纳秒内区分今天修改的两个文件。