在诉诸模糊问题之前,我一直试图解决这个问题几天。我知道 inotify 等工具,但作为作业的一部分,我不允许使用可以帮助您的工具。我使用watch -n 5 -d ls -l
直观地显示了更改。然而,这不是我想要的。我想在删除,创建或重命名目录中的文件时将更改打印到终端。我不是在寻找一个彻底的解决方案,只是关于我应该如何解决这个问题的一些建议。
答案 0 :(得分:0)
实现此目标的最佳方法可能是使用目标目录中的inodes个文件作为跟踪更改的标识符。例如,您可以在脚本启动时通过将inode存储为标识符并使用文件名作为键来构建hash table。一旦构建了初始表,程序将循环回到目录&表再次检查以下内容;
有一个inode消失了吗?如果是这样,那么具有标识符==的密钥对于影响inode的密钥已经存在 删除。
标识符和密钥是否仍与目录匹配?如果没有,则重命名文件。
希望这会帮助你。
答案 1 :(得分:0)
您是否需要立即更改?
如果没有,bash脚本就足够了,脚本中应该有一个循环,检查目录中的所有文件,如果与上次检查不一致,则输出一些内容,然后继续。
答案 2 :(得分:0)
好吧,不使用为预期目的而编写的工具(例如inotifywait
)确实会让事情变得更有趣......什么可以告诉你文件是否被修改过? (提示:如何能够为每个文件提供唯一的指纹?)这不是世界上最快的事情,但md5sum
肯定会为你做到这一点。对结果进行简单的重定向即可:
$ md5sum yourdir/* > yourdir.md5
如何以某种方式添加,删除或更改文件?您需要一种方法来比较每个文件的校验和。您可以简单地使用--check
的{{1}}选项,但这不会捕获新文件或已删除文件,只会删除已更改的文件。还有什么可以比较和识别任何新的,删除或更改的文件?想到md5sum
。
如果您创建新的商家信息,请说:
diff
然后调用$ md5sum yourdir/* > yourcheck.md5
来比较校验和列表?
diff
根据简单的$ diff yourdir.md5 yourcheck.md5
输出,您可以确定是否添加,删除或更改了文件。对于下一次迭代,您只需将diff
复制到yourcheck.md5
(因此它保存目录的当前校验和),然后在下一个时间间隔重复检查。
您还可以使用yourdir.md5
选项的变体来简单地检查更改而不创建输出等,具体取决于您希望如何处理脚本流程。
现在,这不是解决问题的唯一方法,但只能使用diff
和md5sum
进行此操作。
您可以执行非常类似的操作,将diff
替换为md5sum
并存储文件模式等等。您只需要查看是否可以使用另一个经文获得任何速度优势。 。 (虽然我怀疑只是为每个文件挑选mod时间比生成每个文件的stat
快得多)
还有许多其他方法可以捕获目录中文件的状态。 (就此而言,您只需将包含日期和时间的目录列表(例如md5sum
)重定向到文件中ls -al
,而不依赖于diff
或md5sum
以不同的形式捕获相同的信息)。看看你能想出什么。
关键是stat
两个版本的东西。什么......取决于你。