2013-05-12 54 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