【问题标题】:Detect new directory? [duplicate]检测新目录? [复制]
【发布时间】:2017-04-07 09:51:03
【问题描述】:

我想监控网络驱动器路径并检测是否复制了任何新目录,然后自动将整个目录复制到我的本地驱动器。

我心里有以下几点:

  1. 创建一个python脚本,可以维护网络驱动器路径中的文件数量,并将其保存到本地临时文件。

  2. 我将每 2/3 小时运行一次脚本,并将当前目录数与上次计数进行比较。如果当前编号大于前一个编号,只需复制这些目录并粘贴到本地目录即可。通过这种简单的方式,我可以找出是否有任何新目录,对吗?

但是,我想知道 python 中是否还有其他更好的方法或强大的库,以便我可以轻松地检测网络路径中新复制的目录。

【问题讨论】:

  • @LevLevitsky:我猜其中许多答案不适用于网络安装,因此 OP 可能需要更多指导才能获得答案。
  • 您可以在安装驱动器的主机上安装软件吗?因为通常情况下,最好在本地驱动器上监视更改,然后将这些更改发送到其他地方,而不是尝试监视远程安装驱动器上的更改。
  • 如果一个目录被添加而另一个被删除怎么办?计数不变。

标签: python directory


【解决方案1】:

我正在使用这个库来监控文件系统的变化 - 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()

这意味着您可以自定义自己的逻辑来“保存到本地临时文件”和“将当前目录数与最后计数进行比较”。

【讨论】:

  • 这是否适用于网络共享?一眼看去,它在 linux 上使用了inotify,它不会注意到 NFS 或 SMB 挂载的变化。同样,OS X 上的FSEvents 不会注意到 NFS 或 SMB 或(有时)AFP 挂载上的更改。我不确定 Windows 上的 ReadDirectoryChangesW,但我猜它是相似的。
  • github.com/gorakhargosh/watchdog/#supported-platforms Windows(带 I/O 完成端口的 ReadDirectoryChangesW;ReadDirectoryChangesW 工作线程)独立于操作系统(轮询磁盘以获取目录快照并定期比较它们;速度慢且不推荐)
  • 所以你说它可能有效,但只能使用“缓慢且不推荐”的方法? (我猜你还没有测试过。)
  • 不。我是 Mac 和 Linux 用户。我从未在 Windows 上尝试过这个。 :-)
  • 但是您是否在 Mac 或 Linux 上进行了远程共享测试?我不知道它是否可以在 Windows 上运行,但我 99% 确定它不会在 Mac 或 Linux 上运行(可能通过“缓慢且不推荐”的方法除外)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多