我需要检查一个脚本,如果一个文件被修改,因为我读了它(另一个应用程序可以在其间修改它)。根据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 ];
但这仅适用于秒精度,在极少数条件下可能不够。是否有任何其他bash-inbuilt解决方案来解决这个问题,或者我确实需要使用diff或md5sum?
答案 0 :(得分:0)
比较文件哈希值(md5 / sha1)可能是了解(和审核)文件更改的唯一有效方法,以免有人attempt to circumvent尝试检测文件修改。此外,您可以实施某种文件更改通知,而不是(或除此之外)定期轮询:请参阅this s.u. question以获取建议(例如,使用inotifywait)。
但是,如果您的脚本似乎逐渐融合到修订控制系统上,只需将这些文件放在git repo中,然后让git检测并管理更改。
(编辑:我刚刚注意到这些是监视日志文件的脚本(我以为你正在监视文件更改的实际脚本),在这种情况下将它们置于版本控制之下真的不合适。)