Ubuntu iNotify多个文件夹

时间:2013-05-24 13:14:09

标签: linux bash inotify

我编写了一个简短的bash脚本,为几个文件夹设置iNotify,然后调用Python脚本将文本从创建的文件上传到webservice。该过程适用于列表中的第一个文件夹,但创建事件似乎没有为其他文件夹触发。我假设我已经正确地构建了我的脚本。有任何想法吗?代码基本上是:

#!/bin/bash
inotifywait -m --format '%w%f' -e create /Folder1 | while read FILE
do
    echo $FILE
    # upload file
    python /Scripts/UploadFileContents.py 'PAUR' $FILE
done
inotifywait -m --format '%w%f' -e create /Folder2 | while read FILE
do
    echo $FILE
    # upload file
    python /Scripts/UploadFileContents.py 'RACH' $FILE
done
inotifywait -m --format '%w%f' -e create /Folder3 | while read FILE
do
    echo $FILE
    # upload file
    python /Scripts/UploadFileContents.py 'CDR' $FILE
done
inotifywait -m --format '%w%f' -e create /Folder4 | while read FILE
do
    echo $FILE
    # upload file
    python /Scripts/UploadFileContents.py 'CHR' $FILE
done
inotifywait -m --format '%w%f' -e create /Folder5 | while read FILE
do
    echo $FILE
    # upload file
    python /Scripts/UploadFileContents.py 'PRMS' $FILE
done

提前感谢您的任何帮助。

2 个答案:

答案 0 :(得分:1)

您必须在后台启动inotifywait脚本,因为它们会阻止,直到出现更改

答案 1 :(得分:1)

你的第一个while循环永远不会结束。 inotifywait -m是一个永远运行的命令。

最重要的是,inotifywait本身就是阻塞,所以将它们全部分解为一个循环并删除m标志也无济于事。

最简单的解决方案是将它们分解为多个脚本。

或者更理想的是设置一个接受一些参数的脚本,因为大多数逻辑都会重复。

你可以用$ 1替换/ Folder1 和你的第二个变量2美元 然后调用脚本传递您要观看的文件夹。

./watch.sh /Folder1 PAUR &
./watch.sh /Folder2 RACH &

您可以创建第二个脚本,调用包含您要监视的所有文件夹的第一个脚本,每个文件夹运行一个脚本。