python: копировать только отсутствующие файлы из каталогов и подкаталогов FTP в локальные каталоги и подкаталоги

проблема заключается в следующем:

У меня есть локальный каталог '/local' и удаленный FTP-каталог '/remote', полный подкаталогов и файлов. Я хочу проверить, есть ли новые файлы в подкаталогах '/remote'. Если они есть, скопируйте их в '/local'.

вопрос:

Я использую правильную стратегию? Является ли это излишним, и есть ли более быстрый питонический способ сделать это? ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я питон n00b, пытающийся учиться. Так что будьте нежны... =) Вот что я пробовал:

Создайте список всех файлов в /local и его подкаталогах.

LocalFiles=[]
for path, subdirs, files in os.walk(localdir): 
    for name in files:                     
        LocalFiles.append(name)

Поколдуйте с ftplib, используя ftpwalk() и копирование его результатов в список вида:

 RemoteFiles=[['/remote/dir1/','/remote/dir1/','/remote/dir3/'],['file1.txt','file12.py','file3.zip']]

поэтому у меня есть каталог, соответствующий каждому файлу. Затем посмотрите, какие файлы отсутствуют, сравнив списки имен файлов,

missing_files= list(set(RemoteFiles[1]) - set(LocalFiles))  

и как только я найду их имя, я попытаюсь найти каталог с этим именем,

for i in range(0,len(missing_files)):
    theindex=RemoteFiles[1].index(missing_files[i])

который позволяет мне составить список отсутствующих файлов и их каталогов,

MissingDirNFiles.append([remotefiles[0][theindex],remotefiles[1][theindex]])

поэтому я могу скопировать их с помощью ftp.retrbinary. Это разумная стратегия? Приветствуются любые советы, комментарии и советы [особенно для большого количества файлов].


person Massagran    schedule 27.07.2011    source источник


Ответы (1)


Если вы получите время модификации как локального, так и удаленного FTP-каталогов и сохраните его в базе данных, вы сможете сократить поиск новых или измененных файлов. Это должно значительно ускорить процедуру синхронизации.

person Tom Pohl    schedule 27.07.2011
comment
Спасибо за предложение. Я забыл упомянуть, что подпапки в /local и /remote разные. Новые файлы в /remote должны быть отправлены в их ячейки в /local в соответствии с некоторыми критериями (некоторое регулярное выражение, связанное с именем, но не с каталогом). - person Massagran; 28.07.2011
comment
Хорошо, я понимаю, но все же вы можете ускорить локализацию новых или измененных файлов в /remote, просматривая изменения во времени модификации подкаталогов в /remote. - person Tom Pohl; 28.07.2011