Задание Cron для удаления файлов старше x дней?

872
IMB

В настоящее время я использую это задание cron для удаления остановленных временных файлов в определенном месте. Как я могу улучшить это, чтобы удалять только файлы старше x дней (например, 30 дней)?

0 4 * * 0 /bin/rm -fv /home/*/tmp/Cpanel_*

2

1 ответ на вопрос

6
Tomasz

Вы можете использовать find:

find /home/*/tmp/Cpanel_*' -type f \! -newermt "month ago" -delete 

findможет быть сложно, так что делайте домашнее задание, читая об этом, и хорошо тестируйте. Обычной практикой является тестирование с помощью команды, которая не действует на найденные цели, например lsили echo. findимеет несколько встроенных команд, которые вы можете использовать для тестирования. Итак, вы можете начать с этого:

 find /home/*/tmp/Cpanel_*' -type f \! -newermt "month ago" -ls 
Хороший ответ. Для большей эффективности вы можете использовать тот факт, что `find` может иметь любое количество каталогов _ или файлов_ перед первой опцией, например:` find / home / * / tmp / Cpanel_ *! -Newermt "month ago" -delete`; Вы можете добавить `-maxdepth 0`, чтобы гарантировать, что будут удалены только файлы из расширения оболочки, без удаления каких-либо каталогов (вероятно, здесь не актуально). AFH 6 лет назад 1
Я получаю это сообщение: `-bash:! -Newermt: событие не найдено` Есть идеи, что это значит? IMB 6 лет назад 0
@IMB Это означает, что вы используете Bash и не можете найти запись в своей истории. Тебе не нужен Баш. Используйте `find` в качестве команды. Tomasz 6 лет назад 0
@IMB Или, может быть, нет ... Должен быть разрыв между `!` И `-`. Смотрите обновленную строку выше. Tomasz 6 лет назад 0
@IMB А на самом деле это должно быть `\! -newrmt`. Tomasz 6 лет назад 0
Я получаю предупреждение: `find: warning: имена файлов Unix обычно не содержат косых черт (хотя имена путей есть). Это означает, что '-name `* / tmp / Cpanel_ *' ', вероятно, будет постоянно иметь значение false в этой системе. Вы можете найти тест '-wholename' более полезным, или, возможно, '-samefile'. В качестве альтернативы, если вы используете GNU grep, вы можете использовать 'find ... -print0 | grep -FzZ `* / tmp / Cpanel _ * ''.` IMB 6 лет назад 0
@IMB Я все испортил. Смотрите мой ответ обновлен. Теперь все должно быть в порядке (я думаю). Будь осторожен.... Tomasz 6 лет назад 0
@IMB Я также добавил `-type f` только для поиска файлов. Tomasz 6 лет назад 0

Похожие вопросы