2015-02-18 2 views
1

Я пишу сценарий резервного копирования, который проходит через структуру папок и копирует все файлы, которые были изменены с момента последнего прогона. Я могу обнаруживать модификации и творения через свойства файлов (используя getmtime и getctime), но мне также необходимо определить, был ли перемещен файл. Есть ли простой способ сделать это без необходимости записи всей файловой структуры и сравнения с каждым обновлением?Можно ли определить, был ли файл перемещен в Python?

Обратите внимание, что это будет использоваться только для системы Windows.

EDIT: Если возможно, я бы хотел избежать использования внешних библиотек.

+0

Знаете ли вы, что когда файл перемещен (переименован), его CTime обновляется? Но если вы полагаетесь на это для дифференциальной резервной копии, остерегайтесь, что если каталог переименован, то ctimes файлов в нем не обновляются. –

+0

Когда файл копируется и вставляется в другое место, его ctime изменяется. Если его перетащить в другое место в проводнике, его ctime не изменится. Это то, что я пытаюсь обнаружить. –

ответ

2

Вы можете запустить демон, который отслеживает родительскую папку для каких-либо изменений, используя, например, watchdog library:

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

Спасибо. Раньше я встречался с сторожевым псом, но я пытаюсь выяснить, могу ли я сделать это, не используя внешние библиотеки. Забыл упомянуть, что в вопросе, извините>.> –

+0

Рассмотрите то, что вы просите - «можно ли определить, произошло ли что-то, не записав его или не наблюдая за ним в режиме реального времени?» :) –

+0

Я думаю, вы могли бы сказать, что мой вопрос заключается в том, есть ли что-то, что записывает его, и я могу получить доступ таким же образом, чтобы проверять время, созданное или измененное. –

Смежные вопросы