当文件加载到 dropbox 文件夹中时,使用 inotifywait 移动文件

当文件加载到 dropbox 文件夹中时,使用 inotifywait 移动文件

我正在尝试找到一种方法,当文件出现在 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

有了有关您想要移动的文件类型的更多详细信息,您可以添加一些检查、日志记录等...

相关内容