Bash:检查文件在脚本中使用后是否被修改



我需要检查脚本,因为我读取了文件(另一个应用程序可以在两者之间修改它)。根据bash手册,有一个"-N"测试,它应该报告自上次读取以来文件是否被修改。我在一个小脚本中尝试了它,但似乎不起作用。

#!/bin/bash
file="test.txt"
echo "test" > $file
cat $file;
if [ -N $file ];
    then echo "modified since read";
else
    echo "not modified since read";
fi

我还尝试了另一种方式,即触摸另一个文件并使用

if [ "file1" -nt "file2 ];

但这仅适用于秒精度,在极少数情况下可能还不够。这个问题还有其他内置解决方案吗,或者我确实需要使用 diff 或 md5sum?

比较文件哈希 (md5/sha1) 可能是了解(和审核)文件更改的唯一可靠方法,以免有人试图绕过您检测文件修改的尝试。此外,与其(或除了)定期轮询,不如实现某种文件更改通知:请参阅此 s.u. 问题以获取建议(例如,使用 inotifywait)。

但是,如果您的脚本似乎逐渐收敛到版本控制系统上,只需将这些文件放在 git 存储库中,让 git 为您检测和管理更改。

编辑:我刚刚注意到这些是监视日志文件的脚本(我以为您正在监视文件更改的实际脚本),在这种情况下,将它们置于版本控制之下真的不合适。

相关内容

  • 没有找到相关文章