监控目录列表的变化?

6
在Unix系统中,我如何监视(类似于“tail”工具的方式)目录中对文件的更改 - 包括新创建的文件或大小更改等。寻找命令行工具而不是需要安装的工具。
2个回答

5

大多数 Unix 变种都有相应的 API,但并未标准化。在 Linux 上,可以使用 inotify。在命令行中,您可以使用 inotifywait。以下是用法示例:

inotifywait -m /path/to/dir | while read -r dir event name; do
  case $event in
    OPEN) echo "The file $name was created or opened (not necessarily for writing)";;
    WRITE) echo "The file $name was written to";;
    DELETE) echo "The file $name was deleted ";;
  esac
done

通常情况下,Inotify事件类型并不完全符合您想要的通知内容(例如,OPEN事件非常广泛),因此如果最终需要自己创建文件检查,请不要感到难过。


这是正确的答案,因为它展示了如何使用API来监控变化。Ghostdog74的答案可能有效,但它会消耗资源。如果你需要监控1000个目录怎么办? - R. van Twisk
注意:此答案仅适用于使用Linux内核2.6.13或更高版本的系统。其他Unix系统不确定是否适用。 - Joe J
请问一下 *while read -r dir event name; 这段代码是做什么的? - arod

1

如果你不想安装工具,可以自己编写。这只是一个想法。 使用find命令创建您目录的基准文件。使用循环或cron作业,使用相同参数find目录,并检查新文件与基准文件之间的差异。使用像diff这样的工具来获取差异。

例如:

find /path [other options] >> baseline.txt 
while true #or use a cron job
do
  find /path [same options] >> listing.txt
  diff baseline.txt listing.txt
  # do processing here...
  mv listing.txt baseline.txt  # update the baseline.
  sleep 60
done

只是为了我的参考 - 是否存在这样的东西? - siliconpi
你在谈论什么“东西”?如果你在谈论用于这些事情的工具,那么是的。例如tripwire、inotify等工具。 - ghostdog74

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接