我想用Ruby或Python编写一个脚本来查看目录和监视器的内容
1. Any new files
2. Any saves to existing files.
我并不担心文件中的不同之处 - 只是它们已被保存或是新的。
然后脚本返回文件的名称(带有完整路径),或许每2秒钟一次。
我想扫描文件夹中的文件
mainfile.txt
images/image1.jpg
images/icons/icon1.png
所有这些文件/文件夹都需要进行监控。
我最终想要FTP已经更改/添加的文件,但我很高兴能够解决问题的第一部分,因为我知道如何ftp(但是如果你想要的话,包括这个!)
我使用的是OSX 10.5.8
对于红宝石来说,这是一个可以帮助你的宝石:
https://github.com/thibaudgg/rb-fsevent
FSEvent是你想在OS X上使用的系统,这是一个将它带到Ruby的绑定,这个gem被Guard使用,这就是我发现它的方式。 (https://github.com/guard/guard)
您甚至可以考虑使用Guard,它提供了一个很好的api来监视文件/路径并对更改运行操作。
编辑:自从我发布这个新宝石被发布以抽象平台特定的东西: https://github.com/guard/listen ,这个gem提供了一个便携式api来监控多个平台上的文件系统事件
啊,看FTP。碰巧的是,我为工作建造了这样的东西。虽然我正在处理一些我希望你没有的限制,但是在linux上的部分很容易。 OSX在这个时代就是 大多 重新打包的linux。
所以,你应该能够安装 我看,它使用inotify内核功能。如果你不能使用iwatch本身,这将是非常令人惊讶的,因为它是用perl编写的,那么源代码应该指向你如何直接与inotify通信。 这个链接 有使用python和inotify的东西。
iwatch还有其他一些替代方案,但它们都融入了inotify。唯一的另一种选择是在计时器上进行手动目录扫描,这是笨重的,应该避免。我是在Windows上做的,它有......问题。如果我有机会,我将重新制作该部分。
我创建了一个基于的红宝石宝石 守卫 在文件系统事件发生时以类似Dreamweaver的方式将文件同步到ftp。它有点年轻,但我在过去几周一直在使用它没有问题。
它被称为 护ftpsync 我相信它解决了你遇到的确切问题。
我建议使用专为您所描述的工具设计的工具 - rsync。
rsync将为您完成所有这些工作。它将检查已修改或新的文件,并将它们scp(并通过仅将已更改的文件的块而不是整个文件进行优化)到目标主机。
rsync -a mainfile.txt images/image1.jpg images/icons/icon1.png remotehost:/directory/to/sync/files/to
如果您还想要同步的文件列表,可以通过添加以下内容来调整rsync的日志记录:
-q --log-format="%f"
然而,即使这听起来也不像你所追求的那样。听起来你想要一个快速复制的文件系统,而不是频繁的频繁复制。
复制文件系统将知道即时更改(毕竟你将它们转换到文件系统)并且可以在另一方进行相同的更改。初始设置后,您无需任何工作。这可能是不可能的,你必须更充分地描述这种情况。