#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
Комментариев нет:
Отправить комментарий