2013-05-12 47 views
1

我想監視網絡驅動器路徑並檢測是否有任何複製的新目錄,然後自動將整個目錄複製到本地驅動器。檢測新目錄?

,我有以下幾點:

  1. 創建一個python腳本,可以保持沒有文件在網絡驅動器路徑,並將其保存到本地臨時文件。

  2. 我將每2/3小時運行一次腳本,並將當前的目錄數與最後一次計數進行比較。如果當前數字大於以前的數字,只需複製這些目錄並粘貼到本地目錄。通過這種簡單的方法,我可以發現有沒有新的目錄,對不對?

但是,我想知道是否有其他更好的方法或Python中強大的庫,這樣我就可以很容易地在網絡路徑檢測新複製的目錄。

+0

@LevLevitsky:我猜這些答案很多都不適用於網絡坐騎,所以OP可能需要更多指導來獲得答案。 – abarnert 2013-05-12 12:15:55

+0

您可以在安裝驅動器的主機上安裝軟件嗎?因爲通常情況下,最好監視本地驅動器上的更改,然後在其他位置發送更改,而不是嘗試監視遠程安裝的驅動器上的更改。 – abarnert 2013-05-12 12:17:30

+0

如果一個目錄被添加,另一個被刪除,該怎麼辦?計數不會改變。 – muratgu 2013-05-12 18:18:18

回答

0

我使用這個庫監視文件系統的變化 - 在鏈接中給出的https://github.com/gorakhargosh/watchdog/

最簡單的例子

import sys 
import time 
import logging 
from watchdog.observers import Observer 
from watchdog.events import LoggingEventHandler 

if __name__ == "__main__": 
    logging.basicConfig(level=logging.INFO, 
         format='%(asctime)s - %(message)s', 
         datefmt='%Y-%m-%d %H:%M:%S') 
    path = sys.argv[1] if len(sys.argv) > 1 else '.' 
    event_handler = LoggingEventHandler() 
    observer = Observer() 
    observer.schedule(event_handler, path, recursive=True) 
    observer.start() 
    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 

,這意味着你可以定製你自己的邏輯,以「保存到本地臨時文件」並「將當前的目錄數量與上次計數進行比較」。

+0

這是否適用於網絡共享?從簡單的一眼,它在Linux上使用'inotify',它不會注意到NFS或SMB掛載的變化。同樣,OS X上的'FSEvents'不會注意到NFS或SMB或(有時)AFP掛載的變化。我不確定Windows上的ReadDirectoryChangesW,但我猜它是相似的。 – abarnert 2013-05-12 12:21:34

+0

https://github.com/gorakhargosh/watchdog/#supported-platforms 的Windows(ReadDirectoryChangesW與I/O完成端口; ReadDirectoryChangesW工作線程) 操作系統無關(輪詢磁盤目錄快照,並將定期進行比較;慢不推薦) – 2013-05-12 12:22:45

+0

所以你說它可能有效,但只能使用「慢而不推薦」的方法? (我猜你還沒有測試過。) – abarnert 2013-05-12 12:23:26