自动检测文件更改并通过S3进行同步

Cer*_*rin 7 linux filesystems bash amazon-s3 inotify

我在Linux系统上有一个本地媒体文件目录,我使用s3sync脚本与Amazon S3帐户同步.目前,当我知道媒体文件已被修改时,我手动运行s3sync脚本.

修改文件后如何自动运行脚本?

我想创建一个cron作业来每隔几分钟运行一次脚本,但这似乎是一个过多的处理,因为即使没有更改,脚本仍然必须扫描整个目录结构,这是非常大的.

我还考虑了incron/inotify,它允许在特定文件或目录更改时运行命令,但这些工具似乎不会自动支持监视对整个嵌套目录的更改.如果我错了,请纠正我,但似乎incron/inotify只能监控他们明确告知要监控的文件.例如,如果我想监视目录内任何级别的所有文件的更改,我必须编写单独的脚本来监视目录和文件添加/删除,以更新incron监视的文件和目录列表.

有更有效的解决方案吗?

spa*_*ovv 3

对于此类任务,我使用fssm gem。

创建文件 watcher.rb

require 'fssm'

FSSM.monitor('/dir_to_watch/', '**/*') do
  update {|base, relative| `your_script` }
  delete {|base, relative| `your_script` }
  create {|base, relative| `your_script` }
end
Run Code Online (Sandbox Code Playgroud)

然后:

ruby watcher.rb
Run Code Online (Sandbox Code Playgroud)

当然,如果你愿意,你可以妖魔化它。