![当修改(即创建新文件或删除文件)目录的内容时,列出或更新为文本文件](https://linux22.com/image/1531429/%E5%BD%93%E4%BF%AE%E6%94%B9%EF%BC%88%E5%8D%B3%E5%88%9B%E5%BB%BA%E6%96%B0%E6%96%87%E4%BB%B6%E6%88%96%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%EF%BC%89%E7%9B%AE%E5%BD%95%E7%9A%84%E5%86%85%E5%AE%B9%E6%97%B6%EF%BC%8C%E5%88%97%E5%87%BA%E6%88%96%E6%9B%B4%E6%96%B0%E4%B8%BA%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6.png)
我使用 Linux Mint,我想要一个文本文件来反映目录中文件的变化,它应该包含目录中存在的文件的名称并自动添加新创建的文件。我参考了一些链接,它说一个好方法是使用inotify-tools
。我确实查了一下,并想出了这个 bash 脚本。
#!/bin/sh
while inotifywait -qqe modify path-of-directory ; do
ls > path-of-text-file;
done
但它似乎不起作用,请指导我如何去做,如果我只将此脚本添加到启动应用程序列表中以使其始终运行就足够了,还是我应该使用crontab
?
答案1
本手册modify
当文件被写入时触发的状态。您可能想要监视create
、delete
和move
事件。
查看对类似问题的更详细的答案。nohup
那里提到了命令。另一个有用的命令可能是disown
。
我认为循环inotifywait
可能会错过在执行期间发生的事件(因为此时ls
没有运行)。有和选项,它们应该不会错过任何东西。这种方法应该更可靠一些:inotifywait
-m
-d
inotifywait -me create,delete,move path-of-directory | while read a ; do ls > path-of-text-file; done
现在inotifywait -m
始终有效,并且每捕获一个事件输出一行文本。然后每行都会导致ls
运行。
另一个解决方案是iwatch
及其守护进程。当然,设置守护进程需要 root 权限。阅读我对另一个问题的回答并根据您的需要进行调整。
此外你可能还感兴趣LoggedFS - 使用 FUSE 进行文件系统监控。