2011-06-28 20 views
11

我希望寫在Ruby或Python的腳本,將看到一個目錄的內容,並監測監視器事件,因爲它們發生

1. Any new files 
2. Any saves to existing files. 

我不打擾一下什麼是不同的文件 - 只是它們已被保存或是新的。

該腳本然後返回該文件的名稱(使用其完整路徑)或許每2秒鐘一次或某事。

我想要的文件夾內掃描文件這麼

mainfile.txt 
images/image1.jpg 
images/icons/icon1.png 

所有這些文件/文件夾需要進行montitored。

我最終希望FTP的文件已更改/已添加,但我很高興解決問題的第一部分的解決方案,因爲我知道如何FTP(但通過所有手段包括如果你想到!)

我使用OSX 10.5.8

回答

1

我推薦使用設計工具爲你所描述的 - rsync。

rsync會爲你做所有這些工作。它將檢查修改或新建的文件,並對它們進行檢查(並且僅通過將更改的文件塊,而不是整個文件複製到目標主機來進行優化)。

rsync -a mainfile.txt images/image1.jpg images/icons/icon1.png remotehost:/directory/to/sync/files/to 

如果你也想那纔會被同步在文件的列表,你可以通過添加調整的rsync的日誌:

-q --log-format="%f" 

然而,即使這聽起來並不很喜歡你在做什麼後。這聽起來像你想要一個快速複製的文件系統,而不是頻繁的複製。

複製文件系統將知道即時更改已完成(畢竟您正在將它們轉換爲文件系統),並且可以在另一側進行相同的更改。初始設置完成後,您不需要做任何工作。這可能是不可能的,你必須更充分地描述情況。

3

啊,看着FTP。碰巧,我爲工作建立了這樣的東西。雖然我正在處理一些我希望你沒有的限制,但坐在Linux上的部分很簡單。在這個時代的OSX是,主要是一個重新包裝的linux。

因此,您應該能夠安裝使用inotify內核功能的iwatch。如果你不能使用iwatch本身,這將是非常令人驚訝的,因爲它是用perl編寫的,那麼源代碼應該指出你如何直接與inotify進行通信。 This link有使用python inotify的東西。

iwatch還有一些其他的選擇,但他們都鉤入inotify。唯一的另一種選擇是在定時器上進行手動目錄掃描,該定時器笨重且應該避免。我在窗戶上做過,它有....問題。如果我有機會,我會重新修改該部分。

6

對於紅寶石這裏是寶石,它可以幫助你: https://github.com/thibaudgg/rb-fsevent

FSEvent是要在OS X上使用該系統,這是一個結合其推向紅寶石,這顆寶石是用來被後衛是我怎麼找到它的。 (https://github.com/guard/guard)

您甚至可以考慮使用Guard,它提供了一個很好的API來監視文件/路徑並對更改執行操作。

編輯:由於我張貼這種新的寶石被釋放到抽象的平臺具體的東西:https://github.com/guard/listen,這種寶石提供了一個可移植的API來監控在多個平臺上

2

我創建了一個基於guard紅寶石寶石同步文件系統事件文件以類似Dreamweaver的方式發送到文件系統事件時的ftp。這有點年輕,但過去幾周我一直在使用它,沒有出現問題。

它被稱爲guard-ftpsync,我相信它解決了你的確切問題。