0

如果文件在我阅读后被修改,我需要签入脚本(另一个应用程序可以在两者之间修改它)。根据 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 内置解决方案可以解决此问题,或者我确实需要使用 diff 或 md5sum?

4

1 回答 1

0

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

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

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

于 2012-06-11T04:34:50.453 回答