Один из способов - сохранить одну строку в файле, чтобы отслеживать последнее время (с помощью os.path.getctime
), когда вы копировали файлы, и сохраняйте эту строку при каждом копировании.
Примечание: следующий фрагмент может быть оптимизирован.
import datetime
import glob
import os
import shutil
Info_month = datetime.datetime.now().strftime("%B")
list_of_files = sorted(glob.iglob("/data1/logs/{0}/*/*.txt".format(Info_month)), key=os.path.getctime, reverse=True)
if not os.path.exists("track_modifications.txt"):
latest_file_modified_time = os.path.getctime(list_of_files[0])
for filename in list_of_files:
shutil.copy(filename, "/data2/logs/")
with open('track_modifications.txt', 'w') as the_file:
the_file.write(str(latest_file_modified_time))
else:
with open('track_modifications.txt', 'r') as the_file:
latest_file_modified_time = the_file.readline()
should_copy_files = [filename for filename in list_of_files if
os.path.getctime(filename) > float(latest_file_modified_time)]
for filename in should_copy_files:
shutil.copy(filename, "/data2/logs/")
Подход заключается в создании файла, который содержит метку времени последнего файла, который был изменен системой.
Извлечение всех файлов и их сортировка по времени модификации
list_of_files = sorted(glob.iglob('directory/*.txt'), key=os.path.getctime, reverse=True)
Первоначально в if not os.path.exists("track_modifications.txt"):
я проверяю, не существует ли этот файл (т. Е. Впервые копировать), затем сохраняю наибольшую временную метку файла в
latest_file_modified_time = os.path.getctime(list_of_files[0])
И я просто копирую все предоставленные файлы и записываю эту метку времени в файл track_modifications
.
в противном случае файл существует (т. Е. Ранее были скопированы файлы), я просто захожу читать эту временную метку и сравниваю ее со списком файлов, которые я прочитал в list_of_files
, и извлекаю все файлы с большей временной меткой (т. Е. Созданные после того, как последний файл я скопировал). Это в
should_copy_files = [filename for filename in list_of_files if os.path.getctime(filename) > float(latest_file_modified_time)]
На самом деле, отслеживание метки времени последних измененных файлов также даст вам преимущество копирования файлов, которые уже были скопированы при их изменении :)