• Записи 162
  • Теги 66
  • Комментарии 330

Компьютерное

Удаление файлов старше N дней

Часто требуется удалить только те файлы, которые последний раз изменялись раньше определенного количества дней. Например, старые файлы сессий или временные файлы. В Linux это делается достаточно просто командой


find путь -type f -mtime +дни -print | xargs rm -f

Здесь find находит по указанному пути. все файлы со временем модификации более чем указанное количество дней назад, выводит их список, который передается утилите xargs, которая для каждого полученного аргумента вызывает rf -f. В случае, если команда выполняется через cron, пути нужно прописывать полностью, например:


/usr/bin/find ./ -type f -mtime +2 -print | /usr/bin/xargs /bin/rm -f

3 комментария:

Нет
beroal
0

Да, «find» — хорошая команда. Соответствует философии Unix, то есть она только находит файлы и выдаёт их список. Дальше с файлами можно делать что угодно.

MadTechGuy
0

Некоторые файлы могут содержать пробельные символы или даже переводы строк (экзотический случай, но и такое бывает). По умолчанию xargs, вызванный без аргументов, разбивает входящие строки на аргументы, используя пробельные символы в качестве разделителя, и выполняет указанную команду по очереди с каждым аргументом, в результате для файла с именем 'test file.txt' будут выполнены команды

rm -f test


и

rm -f file.txt


Правильные варианты использования:

# Вариант 1 (POSIX-совместимый, работает с любой утилитой find) find . -type f -mtime +2 -exec rm -f {} \; # Вариант 2 find . -type f -mtime +2 -print0 | xargs -0 rm -f # Вариант 3 find . -type f -mtime +2 -delete



4X_Pro
0

Полуоффтоп: эх, хорошо было в MS-DOS: формат имени 8.3 и запрет на все неправильные символы в именах (типа <>\/, пробелов, точек и прочей экзотики). Впрочем, каюсь, сам иногда стал использовать длинные имена с пробелами и русскими буквами, правда, в основном, для каталогов.
А вот за вариант 3 — спасибо.

Написать комментарий


Задать вопрос