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

16

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

user1024
источник

Ответы:

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
don_crissti
источник