是否可以在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()