L. *_*rel 5 bash shell-script symlink timestamps
我想检查链接lnkfile是否比常规参考文件旧reffile。
bashtest内置解引用链接,因此test lnkfile -ot reffile比较 的目标lnkfile,而不是链接本身。
有没有办法让test内置不遵循符号链接?否则,我如何比较符号链接的时间?
我不认为有办法使用test,但你可以使用find.
test "$(find reffile -prune -newer lnkfile)" && command\nRun Code Online (Sandbox Code Playgroud)\n\n此处,如果早于find则返回输出。没有选项相当于. 如果字符串的长度非零,则这是正确的。因此,如果 中有输出,则执行。lnkfilereffiletesttest -nfindcommand
在评论中,我被要求对此解决方案与stat.. 首先,我发现这种stat方法非常好。
我做了一个基准测试来比较。我交替重复测试几次,得到了相似的结果。
\n\n$ time (for i in {1..1000}; do test "$(stat --format=%Z a)" -lt "$(stat --format=%Z b)" && echo foo > /dev/null ; done)\n\n================\nCPU 101%\nCPU 104%\nuser 1.264\nsystem 0.942\ntotal 2.108\n\n$ time (for i in {1..1000}; do test "$(find b -newer a)" && echo foo > /dev/null ; done)\n\n================\nCPU 104%\nuser 0.693\nsystem 0.526\ntotal 1.164\nRun Code Online (Sandbox Code Playgroud)\n\n我看起来find几乎快了一倍,也许是因为它是一个进程而不是两个进程stats?我不知道如何比较它们;如果您能想到其他相关方面,请发表评论。
根据下面 St\xc3\xa9phane Chazelas\ 的评论,还有一些其他差异:
\n\n\n\n其他区别是:
\n\nfind一个是标准的。而stat需要 GNU 实现stat. 该stat方法不适用于同一秒内修改的文件(而find应该适用于支持时间戳亚秒粒度的系统)。既不find也不stat支持任意文件名。如果其中一个文件无法编辑,您会发现其他差异
\nstat()。