Как я могу удалить все файлы в папке, к которым не обращались в течение определенного времени?

14

Я хотел бы запустить ночное задание cron, которое удаляет все файлы в папке, к которым не было доступа в течение недели или более. Какой самый эффективный способ сделать это в bash?

bloudermilk
источник
2
findможет фильтровать по времени. «Правильность» atime зависит noatimeкак минимум от конфигурации (см. ).

Ответы:

20

Вы хотите findинструмент .

find folder -depth -type f -atime +7 -delete

(Это будет удалить все файлы ( только регулярные те , ни трубы, специальные устройства, каталоги, символические ссылки) в данной папке и все подкаталоги (рекурсивно) , где последний раз доступа является больше чем 7 дней назад.)

Пауло Эберманн
источник
6
Возможно, вы захотите добавить -type fтуда, чтобы убедиться, что он удаляет только файлы, а не целые каталоги.
Шадур
3

Вы можете проверить, tmpwatchкакие из них можно использовать в работе cron. Не нужно кататься самостоятельно find. На RHEL это в tmpwatchRPM.

Аарон Д. Мараско
источник
Это определенно более элегантное решение, но я предпочитаю мобильность find.
bloudermilk