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

时间:2012-06-08 22:36:53

标签: file bash shell compare

我需要检查一个脚本,如果一个文件被修改,因为我读了它(另一个应用程序可以在其间修改它)。根据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?

1 个答案:

答案 0 :(得分:0)

比较文件哈希值(md5 / sha1)可能是了解(和审核)文件更改的唯一有效方法,以免有人attempt to circumvent尝试检测文件修改。此外,您可以实施某种文件更改通知,而不是(或除此之外)定期轮询:请参阅this s.u. question以获取建议(例如,使用inotifywait)。

但是,如果您的脚本似乎逐渐融合到修订控制系统上,只需将这些文件放在git repo中,然后让git检测并管理更改。

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