如何观察和报告特定目录中的文件创建?

How to watch and report for file creations in a specific directory?

我是 运行 一个在特定目录中创建和删除文件的程序。另一个程序正在尝试读取这些文件并对其执行操作,但它总是说找不到特定文件。

当使用 "ls -l" 手动查找这些文件时,我可以看到其中一些,但我并没有真正了解所有文件的完整概况。

为了调试整个过程,我需要一份报告,告诉我这个目录中有一个文件 created/deleted。这些文件是在子文件夹中创建的,因此解决方案必须能够遍历目录直到找到文件。

我认为 unix "watch" 命令可以提供帮助,但我不知道如何递归进入目录。

有什么想法吗?

也许您需要重新设计算法,与此同时,以下内容可能会有所帮助:

watch -n 1 tree /path/to/your/directory

如果您使用的是类似 debian 的系统,请使用 sudo apt-get install tree;如果默认情况下树可执行文件不可用,请使用等效系统。

NB watch 接受刷新率(通过 -n 开关传递)直到 0.1 秒

inotifywait 在包 inotify-tools 中。您可以简单地将您的目录作为参数调用它。这是一个示例

$ inotifywait -m .
Setting up watches.
Watches established.
./ CREATE .#34003250.cpp
./ MODIFY 34003250.cpp
./ OPEN 34003250.cpp
./ MODIFY 34003250.cpp
./ CLOSE_WRITE,CLOSE 34003250.cpp
./ DELETE .#34003250.cpp
./ OPEN 33997523.txt
./ CLOSE_NOWRITE,CLOSE 33997523.txt
./ OPEN 33997523.txt
./ ACCESS 33997523.txt
./ CLOSE_NOWRITE,CLOSE 33997523.txt

可以非常有效地格式化和过滤输出 - 手册页有完整的详细信息。它也可以监视(递归)子目录,但要注意警告:

-r, --recursive

Watch all subdirectories of any directories passed as arguments. Watches will be set up recursively to an unlimited depth. Symbolic links are not traversed. Newly created subdirectories will also be watched.

Warning: If you use this option while watching the root directory of a large tree, it may take quite a while until all inotify watches are established, and events will not be received in this time. Also, since one inotify watch will be established per subdirectory, it is possible that the maximum amount of inotify watches per user will be reached. The default maximum is 8192; it can be increased by writing to /proc/sys/fs/inotify/max_user_watches.