Dropbox 和 pyinotify

Posted

技术标签:

【中文标题】Dropbox 和 pyinotify【英文标题】:Dropbox and pyinotify 【发布时间】:2010-09-25 18:36:40 【问题描述】:

我刚买了一台 iPad,但我愚蠢地获得了 TexTouch 应用程序。愚蠢的是,由于 Apple 的规定,TexTouch 无法编译 Tex。它使用 Dropbox 将 .tex 文件同步到计算机。在远程计算机上,它被另一个程序捕获,该程序将 .tex 文件编译为 PDF 并将其发回。但是(惊喜!)仅在 Windows 和 Mac 中的那个遥远的程序。我在 Linux 上。所以我想,为什么不使用inotify?为了让事情变得更简单,我实际上使用了 pyinotify,这样我就不必处理大量的编译了。但是,当 Dropbox 删除文件时,这里是 pyinotify 白话中发生的事件。 (显然,“first doc.tex”是我正在同步的文件的名称。)

event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event cookie=151401 dir=False mask=0x40 maskname=IN_MOVED_FROM name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event cookie=151402 dir=False mask=0x80 maskname=IN_MOVED_TO name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x4 maskname=IN_ATTRIB name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >

我能做些什么呢?唯一看起来是唯一的事件是 IN_MOVE_FROM 和 IN_MOVE_TO 事件。但监控这些看起来是个坏主意。有没有办法检测 Dropbox 发起的事件?我应该使用 inotify 或 pyinotify 以外的东西吗?

【问题讨论】:

【参考方案1】:

好吧,IN_OPEN(打开读取的文件)、IN_ACCESS(访问的文件)和IN_ATTRIB(修改的文件属性)显然不是你需要的。 IN_CLOSE_NOWRITE 表示该文件已关闭以供阅读(即无法进行任何更改),因此这也不是您所需要的。所以它必须是IN_MOVED_FROMIN_MOVED_TO。 你确定没有其他事件发生吗? 如果是,那么该文件可能正在其他地方创建,然后被移动到其最终位置 ~/Dropbox

【讨论】:

【参考方案2】:

我得到了一个监视 IN_MOVED_TO 的脚本。每当 Dropbox 删除一个新文件时,它就会被触发。您应该使用 IN_MOVED_TO。

<Event cookie=63896 dir=False mask=0x80 maskname=IN_MOVED_TO name=test.zip path=/home/bpotter/Dropbox/Apps/Backup pathname=/home/bpotter/Dropbox/Apps/Backup/test.zip wd=1 >

【讨论】:

以上是关于Dropbox 和 pyinotify的主要内容,如果未能解决你的问题,请参考以下文章

新的存储网站,和存储单元dropbox

使用 Dropbox 和 git 没有冲突

dropbox无法使用了,怎么办

PHP 和 Linux IPC 套接字(和 Dropbox)

Dropbox 和 pyinotify

为何云存储服务——Dropbox在中国被封?