我如何修改此 inotifywait 脚本以从任何目录上传任何文件?
我正在编写一个inotifywait
基于脚本的脚本,该脚本应该在目录中递归检查文件的创建和更改,然后使用将修改后的文件上传到 Dropbox dropbox-uploader.sh
(请注意,在此环境中,正常的 Dropbox 应用程序不起作用,这就是我使用脚本的原因)。
inotifywait -m -r -q -e modify,create --format '%f' ~/Dropbox-Uploader/name-of-folder |
while read FILE; do /home/user/Dropbox-Uploader/dropbox_uploader.sh \
upload ~/Dropbox-Uploader/name-of-folder/$FILE /name-of-folder/$FILE; date; done
目前存在的问题是,该脚本只会上传位于name-of-folder
上述文件夹()中的文件,但不会上传子文件夹中已更改的文件。
有人知道如何解决这个问题吗?
答案1
--format '%f'
还不够,它只提供文件名(如basename
)。用于--format '%w%f'
获取完整(更)路径。- 如果您将
~/Dropbox-Uploader/name-of-folder
作为一个参数,inotifywait
那么这些路径将以 开始~/Dropbox-Uploader/name-of-folder/
,这将使您的dropbox_uploader.sh
调用变得有些困难,因为您指定(我猜)目标路径。考虑cd
,然后./
作为 的一个参数inotifywait
。 - 引用变量(例如
"/name-of-folder/$FILE"
),否则任何路径中的空格都会让你感到惊讶。
我不使用 Dropbox,所以我无法真正调试这个问题。
cd ~/Dropbox-Uploader/name-of-folder &&
inotifywait -m -r -q -e modify,create --format '%w%f' ./ |
while read FILE; do /home/user/Dropbox-Uploader/dropbox_uploader.sh \
upload "$FILE" "/name-of-folder/$FILE"; date; done