Сценарий для удаления старых файлов (tar) в каталоге, если число превышает 15?

Пожалуйста, любой может дать решение для этого. Я пытаюсь взять резервную копию gitlab на другой сервер, скрипт должен удалить старые файлы, если номер файла в каталоге превышает 15?

1
задан 24 February 2017 в 15:50

1 ответ

Учитывая, что оба 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])

Как использовать

Скопировать сценарий в пустую файл, сохранить его как keep_latest.py Проверить запуск сценария с терминала с указанием пути к вашему каталогу и количества (последних) файлов для хранения в качестве аргументов:
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 или сценарий выше был бы объектом тестирования и сравнения.

В любом случае, используемые ресурсы практически не будут.

1
ответ дан 23 May 2018 в 01:10
  • 1
    @Arronical Спасибо за редактирование :) hilareous typos :) – Jacob Vlijm 24 February 2017 в 16:25
  • 2
    Легко сделанный, я нахожу, что я очень сильно концентрируюся на действительном коде, а затем делаю глупые ошибки на простой части! – Arronical 24 February 2017 в 16:26

Другие вопросы по тегам:

Похожие вопросы: