Удаление файлов по возрасту


16

Есть ли команда для удаления всех файлов в каталоге, которые не были изменены за N дней? Мне нужно почистить старые журналы.

Ответы:


24

Это приведет к удалению всех файлов старше 5 дней, вы можете -name '*log'указать их там, чтобы быть более точным, и вы можете указать и maxdepthкоманду find.

find /some/dir -type f -mtime +5 -delete


5
Хотя мудрые системные администраторы делают пробный прогон -lsвместо того, -deleteчтобы убедиться, что это не удалит все, что они хотели сохранить. Да, если говорить из опыта здесь.
Шадур

2
Исходя из опыта, они также проверяют свой путь. или нет, так как я однажды сделал / some/dir/версию. :(
Хеннес

3

С квалификаторамиzsh и (.m+n) glob : .выбирает только обычные файлы, m+nвыбирает файлы, измененные более n дней назад;
например, список файлов в текущем каталоге, которые были изменены более 9 дней назад:

print -rl -- *(.m+9)

добавить, Dчтобы включить точечные файлы:

print -rl -- *(D.m+9)

или если вы хотите использовать рекурсив (и перечислите, например, только файлы, заканчивающиеся на .log):

setopt extendedglob
print -rl -- **/*.log(.m+9)

заменить print -rlс , rmесли вы довольны результатом; хотя вам, возможно, придется использовать, zargsесли у вас много файлов (чтобы избежать слишком длинного списка аргументов ):

autoload zargs
zargs ./**/*(.m+9) -- rm
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.