Страницы

Поиск по вопросам

вторник, 31 марта 2020 г.

Удалять файлы с сортировкой по времени не больше определённого кол-ва

#linux #bash


Я знаю, что можно удалять старые файлы (старше одного дня) просто командой find /my/path/
-mtime +1 -type f -exec rm  {}  \; , а можно ли как-то удалять в директории /my/path/
файлы старше одного дня, но только, если их (файлов) там больше, ну, например, 10-ти?
А точнее даже так: удалять в директории /my/path/ файлы, но всегда оставлять 10 самых
новых.

Не могу найти простого способа :( Пока вижу длинный и сложный (для меня) способ с
сортировкой по ls -lsht, условием if ... > 10 и удалением в цикле...
    


Ответы

Ответ 1



GNU find умеет выводить дату в секундах с 1970года, сортировку по дате поручим sort -n, cut вырежет первый столбец после сортировки, отбрасывать первые 10 строк умеет tail. Удалять махом много файлов умеет rm + xargs. Если список файлов на удаление пустой - команду rm не запускаем. Все вместе получается вот так: find /my/path/ -type f -mtime +1 -printf "%A@ %p\n" | sort -n | cut -d" " -f 2 | tail -n "+10" | xargs --no-run-if-empty rm То же самое, разделенное по строкам для простоты восприятия: find /my/path/ -type f -mtime +1 -printf "%A@ %p\n" \ | sort -n \ | cut -d" " -f 2 \ | tail -n "+10" \ | xargs --no-run-if-empty rm То же самое, но pipe покороче (объединение cut и tail в sed): find /my/path/ -type f -mtime +1 -printf "%A@ %p\n" \ | sort -n \ | sed -rn '10,$s|^[^ ]* (.*$)|\1|p' \ | xargs --no-run-if-empty rm

Комментариев нет:

Отправить комментарий