linux - (Bash) 如何监控目录中的文件更改(创建、删除、重命名)

标签 linux bash

在求助于一个模糊的问题之前,我已经尝试解决这个问题几天了。我知道诸如 inotify 之类的工具,但是作为作业的一部分,我不允许使用为您做这件事的工具。我使用 watch -n 5 -d ls -l 来直观地显示更改。然而,这不是我要找的。当目录中的文件被删除、创建或重命名时,我想将更改打印到终端。我不是在寻找一个彻底的解决方案,只是一些关于我应该如何尝试解决这个问题的建议。

最佳答案

完成此操作的最佳方法可能是使用 inodes目标目录中的文件作为跟踪更改的标识符。例如,您可以构建一个 hash table当您的脚本通过将 inode 存储为标识符并使​​用文件名作为键来启动时。一旦建立了初始表,程序将再次循环遍历目录和表,检查以下内容;

  • inode 消失了吗?如果是这样,则具有该受影响 inode 的标识符 == 的键已被删除 已删除。

  • 标识符和 key 是否仍与目录匹配?如果没有,则文件已重命名。

  • 最后,目录中是否出现了新的 inode?如果是,则已创建一个新文件,因此我们需要将其及其文件名添加到表中。

希望对您有所帮助。

关于linux - (Bash) 如何监控目录中的文件更改(创建、删除、重命名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796143/

相关文章:

linux - "killall -r -9 ."保证有效吗?

linux - 配置:错误:找不到库的版本

linux - 从另一个 shell 脚本执行 shell 脚本并传递关键字作为参数

bash - Shell:如何检查目录中是否不存在 .txt 文件?

arrays - 根据数组验证字符串

linux - 用于检查创建的 AMI 是否可用的脚本,

linux - 使用 Linux 命令行过滤

linux - 如何处理单引号之间双引号中有空格的变量

bash - 将文件名添加到循环内多个 fasta 文件的 fasta header

linux - 什么是 'library' 文件?即: shared library