我正在尝试找到一种方法,当文件出现在 CentOS 上的保管箱中时,立即将其移动到另一个文件夹。
inotify
我已经在互联网上搜索了一些线索,但除了我需要用来调用一个脚本来处理文件的事实之外,我无法得到任何进一步的信息。
我的 BASH 知识非常有限,我怀疑我能否用 PHP 编写这个。
换句话说,如何使用文件出现后立即将其移动到另一个文件夹inotify
?
答案1
inotifywait
每次指定目录的内容发生更改时,该命令都会打印一条消息。您需要选择正确的事件:不是文件创建时,而是 Dropbox 完成下载时。我不太清楚 Dropbox 是如何运作的。如果它写入文件的最终位置,则侦听close_write
事件。如果它将文件写入临时位置,然后将其移动到位,则侦听moved_to
事件。将选项传递-m -q
给,inotifywait
以便它继续侦听事件(默认情况下,它只等待下一个事件)并只打印相关消息。
cd ~/Dropbox/myfolder
inotifywait -m -q -e close_write --format %f . | while IFS= read -r file; do
cp -p "$file" /path/to/other/directory
done
答案2
这是一个简单的方法:
#!/usr/bin/env bash
dir=/home/ortix/Dropbox/new/
target=/home/ortix/movedfiles/
inotifywait -m "$dir" --format '%w%f' -e create |
while read file; do
mv "$file" "$target"
done
有了有关您想要移动的文件类型的更多详细信息,您可以添加一些检查、日志记录等...