用于监视文件夹中新文件并在检测到新文件时运行命令的工具

用于监视文件夹中新文件并在检测到新文件时运行命令的工具

如何立即检测新文件何时添加到某个文件夹中脚本?

我希望脚本在文件夹中创建文件后立即处理文件。除了安排时间还有什么方法吗每分钟左右检查一次新文件的工作?

答案1

你应该考虑使用inotifywait, 举个例子:

inotifywait -m /path -e create -e moved_to |
    while read dir action file; do
        echo "The file '$file' appeared in directory '$dir' via '$action'"
        # do something with the file
    done

在 Ubuntu 中,inotifywaitinotify-tools包裹

从版本 3.13(当前在 Ubuntu 12.04 中)开始,inotifywait将包含不带选项的文件名-f。旧版本可能需要强制。

需要注意的是,-e选择inotifywait是进行事件过滤的最佳方式。此外,您的read命令可以将位置输出分配给多个变量,您可以选择使用或忽略这些变量。无需使用 grep/sed/awk 来预处理输出。

答案2

我只是做了这个,除了在检查之间丢失文件的可能性很小之外,没有发现什么大问题。

while true
do
       touch  ./lastwatch
       sleep 10
       find /YOUR/WATCH/PATH -cnewer ./lastwatch -exec SOMECOMMAND {} \;
done

如果您的文件处理时间不太长,您就不应该错过任何新文件。您还可以设置活动的背景...它不是防弹的,但它可以在没有像 inotify 这样的外部工具的情况下达到某些目的。

答案3

我更喜欢incron,因为它更容易管理。本质上,它是一项利用的服务inotify,您可以设置配置以根据文件更改操作采取操作。

前任:

<directory> <file change mask> <command or action>  options
/var/www/html IN_CREATE /root/scripts/backup.sh

您可以在此处查看完整示例: http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/

答案4

如果您想检测新文件,请处理它们,最后删除您可以使用的已处理文件系统路径。该方法基于inotify。有一个选项 DirectoryNotEmpty,因此 systemd 可以在检测到目录中的任何文件时始终运行您的脚本。您必须记住,只有当您可以删除后续文件并且脚本将目录留空时,它才会起作用。

首先准备mymonitor.service文件

[Unit]
Description=Start the script

[Service]
Type=oneshot
ExecStart=/path/to/your/script

接下来转到 mymonitor.path 定义路径

[Unit]
Description= Triggers the service

[Path]
DirectoryNotEmpty=/path/to/monitor

[Install]
WantedBy=multi-user.target

如果 .path 文件的名称与服务的名称相同,则无需在 .path 文件中指定服务名称。

它基于监控文件访问傻瓜式

相关内容