我有一个文件夹,其中包含正在计算机之间同步的文件。从计算机 A 上传文件后,我想将它们从计算机 B 的 Dropbox 文件夹复制到另一个文件夹。如何检测 Dropbox 文件夹何时更新?我可以定期检查 Dropbox 文件夹,但也许有更优雅的解决方案?
问问题
815 次
3 回答
2
签出inotify或incrond,一旦检测到文件夹中的更改,您可以使用其中一种工具运行脚本。如果您选择incrond
,您可以运行incrontab -e
并添加如下内容:
/path/to/watched/dir IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /path/to/script
例如,在脚本中,您可以启动一个循环 while:
[[ $(dropbox filestatus /path/to/watched/dir) != "" ]]
或者:
[[ $(lsof -p $dropbox_pid | grep 'REG|DIR.*/path/to/watched/dir') != "" ]]
接着:
cp /path/to/watched/dir /path/to/copy/dir
当循环完成时。
于 2012-12-23T15:01:26.240 回答
2
不!(关于接受的答案)
Dropbox 目前(2012 年可能有所不同)不会触发IN_CLOSE_WRITE
、IN_MODIFY
或任何其他直观的选择。Dropbox 将内容移动到临时文件中,然后将其移回 Dropbox 目录。因此触发的 inotify 事件是IN_MOVE_TO
和IN_MOVE_FROM
。
所以你的 incrontab 指令应该理想地阅读:
/path/to/watched/dir IN_MOVE_TO,IN_CREATE,IN_DELETE /path/to/script
于 2014-10-15T22:57:49.920 回答
2
如前所述,dropbox 不会触发 IN_CREATE、IN_DELETE 或 IN_MODIFY 等。它会触发 IN_MOVED_TO 和 IN_MOVED_FROM。在 Debian 8 上验证。
于 2015-12-30T18:41:19.350 回答