Пожалуйста, любой может дать решение для этого. Я пытаюсь взять резервную копию gitlab на другой сервер, скрипт должен удалить старые файлы, если номер файла в каталоге превышает 15?
Учитывая, что оба ctime и mtime не гарантируют, что вы фактически удаляете самые старые файлы, в зависимости от того, что произошло с файлами между ними, сценарий ниже удаляет файлы, превышающие произвольное число, внутри заданный каталог.
(ao) здесь мы можем прочитать:
ctime - это время обработки inode или файла. Ctime обновляется при изменении атрибутов файла, например, изменении владельца, изменении разрешения или перемещении файла в другую файловую систему, но также будет обновляться при изменении файла. mtime mtime - это время изменения файла. Mtime обновляется при изменении файла. Всякий раз, когда вы обновляете содержимое файла или сохраняете файл, mtime обновляется. В большинстве случаев ctime и mtime будут одинаковыми, если только обновлены только атрибуты файла. В этом случае обновляется только ctime.В соответствии с ctime файла крошечный фоновый скрипт ниже удалит самые старые файлы, если количество файлов превышает установленное число.
#!/usr/bin/env python3
import sys
import os
from operator import itemgetter
import time
dr = sys.argv[1]; n = int(sys.argv[2])
while True:
time.sleep(3)
# list files; get the number of files
files = [os.path.join(dr, f) for f in os.listdir(dr)]; nfiles = len(files)
if nfiles > n:
# if nfiles exceeds the threshold, get the number of files to delete
todel = nfiles - n
# sort the list by creation date, delete the oldest
del_list = sorted([
[f, os.path.getctime(f)] for f in files
], key=itemgetter(1))[:todel]
for f in del_list:
os.remove(f[0])
python3 '/path/to/keep_latest.py' '/path/to/directory' 15
сохранить последние 15 файлов в '/path/to/directory'. Если все отлично работает, добавьте в приложения для запуска: Dash> Startup Applications> Add. Добавьте команду: python3 '/path/to/keep_latest.py' '/path/to/directory' 15
Сценарий выше является одним из многих вариантов. В соответствии с ctime достаточно mtime или ctime, другой вариант должен был бы использовать здесь и сделать его таким же, как сценарий выше, но только в том случае, если файл добавлен, перемещен или скопирован в каталог.
Если точность времени (немедленное удаление дополнительных файлов) не очень важна, также команда, выполняемая с помощью cron, будет хороший вариант.
Если бы более эффективный цикл inotifywait или сценарий выше был бы объектом тестирования и сравнения.
В любом случае, используемые ресурсы практически не будут.