是否可以在Python中检测文件是否已移动?

是否可以在Python中检测文件是否已移动?,python,filesystems,Python,Filesystems,我正在编写一个备份脚本,该脚本通过文件夹结构运行,并复制自上次运行以来已更改的任何文件。我可以通过文件的属性检测修改和创建(使用getmtime和getctime),但我还需要能够检测文件是否已移动。有没有一种简单的方法可以做到这一点,而不必记录整个文件结构并在每次更新时进行比较 请注意,这将仅在Windows系统上使用 编辑:如果可能的话,我希望避免使用外部库。您可以运行一个守护程序来监视父文件夹的任何更改,方法是使用,例如: 您知道吗,当文件被移动(重命名)时,其ctime会被更新?但是,如

我正在编写一个备份脚本,该脚本通过文件夹结构运行,并复制自上次运行以来已更改的任何文件。我可以通过文件的属性检测修改和创建(使用
getmtime
getctime
),但我还需要能够检测文件是否已移动。有没有一种简单的方法可以做到这一点,而不必记录整个文件结构并在每次更新时进行比较

请注意,这将仅在Windows系统上使用


编辑:如果可能的话,我希望避免使用外部库。

您可以运行一个守护程序来监视父文件夹的任何更改,方法是使用,例如:


您知道吗,当文件被移动(重命名)时,其ctime会被更新?但是,如果您依赖于此进行差异备份,请注意,如果重命名目录,则其中文件的ctime不会更新。当文件复制并粘贴到其他位置时,其ctime会发生更改。如果在explorer中拖动到其他地方,其ctime不会更改。这就是我想检测的。谢谢。我以前遇到过watchdog,但我正试图弄清楚我是否可以在不使用外部库的情况下做到这一点。忘了在问题中提到这一点,抱歉>>考虑一下您的问题--“是否可以在不记录或不实时观察的情况下确定是否发生了某些事情?”:)我想你可能会说我的问题是,是否有记录它的东西,我可以以类似于检查创建或修改时间的方式访问。@MarkR.-你能让我知道我是否可以自定义消息。我必须在登录时捕获用户以及机器的IP地址。
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()