0

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

#!/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

提前感谢您的任何帮助。

4

2 回答 2

1

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

于 2013-05-24T13:16:38.700 回答
1

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

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

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

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

您可以将 /Folder1 替换为 $1 并将您的第二个变量替换为 $2 然后调用您的脚本传递您要查看的文件夹。

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

您可以制作第二个脚本,使用您要观看的所有文件夹调用第一个脚本,以便每个文件夹运行一个脚本。

于 2013-11-08T14:40:07.723 回答