Cron удалить файлы в папке старше 7 дней

Обновлено: 07.07.2024

Эта небольшая заметка ориентирована на совсем начинающих. Сегодня мы рассмотрим как удалить файл linux через терминал. Для более опытных пользователей это элементарная задача, но новичкам надо с чего-то начинать. Знать как работать с файлами в консоли очень важно.

К тому же удаление из консоли дает много преимуществ и большую гибкость. Например, с помощью специальной команды вы можете полностью стереть файл с жесткого диска, так что его уже ни за что невозможно будет восстановить или одной командой с помощью специальных символов, условий или регулярных выражений удалить сотни ненужных файлов в одном каталоге или подкаталогох соответствующих определенному критерию.

В Linux для удаления файлов предусмотрена стандартная утилита rm. Как и все остальные, стандартные утилиты в имени rm тоже заложена определенная идея. Это сокращение от английского слова Remove.

Удаление файлов в Linux

Чтобы удалить файл linux достаточно передать в параметрах команде адрес файла в файловой системе:

Чтобы удалить все файлы, начинающиеся на слово file можно использовать специальный символ *, означает любой символ в любом количестве:

Эта команда удаления файла в linux должна использоваться очень осторожно, чтобы не удалить ничего лишнего. В утилите есть опция -i, которая заставляет программу спрашивать пользователя перед тем, как удалить файл linux:

rm: удалить пустой обычный файл «/home/user/file»?

Если файлов очень много, вы уверены в правильности команды и отвечать каждый раз y неудобно, есть противоположная опция - f. Будут удалены все файлы без вопросов:

rm -f /home/user/file*

Для удаления директорий, вместе с файлами и поддиректориями используется опция -R, например:

rm -Rf /home/user/dir

Будет удалено все что находиться в папке dir, и эта папка. Только будьте бдительны, чтобы не получился знаменитый патч Бармина:

Не стоит выполнять эту команду в своей системе, как видите, она удаляет все файлы в файловой системе Linux.

Удаление файла в linux также возможно с помощью утилиты find. Общий синтаксис find:

find папка критерий действие

Например, мы хотим удалить файл linux по имени:

find . -type f -name "file" -exec rm -f <> \;

Будут найдены все файлы с именем file в текущей папке и для них вызвана команда rm -f. Можно не вызывать стороннюю утилиту, а использовать действие delete:

find . -type f -name "file" -delete

Удалить все файлы в текущей директории, соответствующие определенному регулярному выражению:

find . -regex '\./[a-f0-9\-]\.bak' - delete

Или удалить файлы старше определенного строка, может быть полезно для удаления старых логов:

find /path/to/files* -mtime +5 -exec rm <> \;

Будет выполнено удаление файлов через терминал все файлы в папке старше 5-ти дней.

Чтобы полностью стереть файл, без возможности восстановления используйте команду shred. Во время удаления файлов с помощью утилиты rm удаляется только ссылка на файл, само же содержимой файла по-прежнему находиться на диске, пока система не перезапишет его новыми данными, а пока этого не случится файл можно легко восстановить. Принцип действия утилиты такой - после удаления файла, его место на диске несколько раз перезаписывается.

Опцией -n - можно указать количество перезаписей диска, по умолчанию используется 3. А если указать опцию -z программа при последней перезаписи запишет все нулями чтобы скрыть, уничтожение файла.

Выводы

Вот и все. Теперь вы знаете как удалить файл в Ubuntu, как видите, делать это не так уж сложно. Если у вас остались вопросы, пишите в комментариях!

Иногда надо сделать удаление файлов старше n дней. Например Backup’ ы. Можно делать это вручную, отсортировать их по дате и удалить, а можно воспользоваться скриптом. В данном примере мы рассмотрим скрипт для удаления файлов старше n дней и добавим задание в планировщик Windows Server 2012R2.

Иногда надо сделать удаление файлов старше n дней. Например Backup’ ы. Можно делать это вручную, отсортировать их по дате и удалить, а можно воспользоваться скриптом. В данном примере мы рассмотрим скрипт для удаления файлов старше n дней и добавим задание в планировщик Windows Server 2012R2.

Содержание:

1. Скрипт удаления файлов старше n-дней

2. Создание задания в планировщике задач

Скрипт на самом деле очень простой, создается в PowerShell и выглядит он следующим образом:

Где:
F:\backup\ - путь, в какой папке мы будем с вами искать файлы для удаления *.* - имя (маска) файлов /d -30 - старше скольки дней нам необходимо удалить файлы.

Вот так это выглядит в PowerShell:

удаление


Осталось только его выполнить и все.


Все хорошо, у нас есть скрипт. Мы можем выполнять его вручную, когда необходимо очистить наши бекапы. Но зачем выполнять это вручную? Мы поручим планировщику запускать наш скрипт и избавимся сами от рутинной работы.

Итак, что нам для этого надо?

Для начала идем в "Пуск -> панель управления -> Администрирование" и запускаем там "Планировщик заданий".


Выбираем пункт "Создать задачу":


На вкладке "Общие" задаем имя задания, его описание и пользователя, от которого оно будет выполняться. По умолчанию там будет пользователь, под которым вы вошли в данный момент в систему.


Далее переходим на вкладку "Триггеры" и создаем расписание, когда мы будем запускать наше задания. У меня настроено в 10:00 каждые 2 дня.


Далее идем на вкладку "Действия" и задаем действие, которое будет выполняться. Выбираем "Запуск программы"

программу или сценарий

и указываем путь до PowerShell:

А аргументе указываем путь до нашего скрипта, который мы создали ранее:

Нажимаем "Ок" и еще раз "Ок"

Все, на этом наше задание создано. Осталось дождаться, когда будет выполнено наше действие по расписанию и проверить, все ли правильно было настроено.

Привет. Я хочу удалить все файлы журнала За последние 7 дней из папки, но оставить все остальные файлы. Могу ли я использовать команду ниже? Как вы указываете, что он просто удаляет файлы .расширение журнала?

Мне нужно записать эту команду в какой-то файл или я могу просто написать ее в командной строке и запустить автоматически каждый день?

Я понятия не имею, как запустить задание cron в linux.

используйте подстановочный знак . И просто положите его в свой crontab использовать crontab-e возможность редактирования заданий crontab.
пример :

EDIT: обновить corntab до crontab

изменить персональный crontab, запустив crontab -e . Все в этом файле будет выполняться любым пользователем, которого вы редактируете.

синтаксис crontab выглядит следующим образом:

когда вы редактируете свой собственный персональный crontab, via crontab -e , вы опускаете поле имени пользователя, потому что использование выводится.

при этом ваша запись должна выглядеть так:

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

когда вы закончите, вы можете использовать crontab -l перечислить ваш личный crontab.

ps. Редактор по умолчанию в большинстве систем Linux-vi, если вы не знаете vi, используйте что-то простое, например nano, установив переменную environ export EDITOR=nano

чтобы создать задание cron, поместите в /etc/cron файл, содержащий следующее.daily dir:

вы должны использовать crontab -e чтобы изменить crontab и запланировать задание. Это может выглядеть примерно так:

это рекурсивно удалит все .файлы журнала в каталоге / path/to / file каждый день в 1am.

поскольку речь идет о файлах журнала, вы должны посмотреть на logrotate . Он работает ежедневно из задания system cron и будет вращать журналы для вас на основе правил из /etc/logrotate.conf-файл, который обычно включает /etc / logrotate.каталог д'. Поэтому нет необходимости в crontab или find.

вы также можете иметь свое собственное задание cron, если у вас нет доступа для добавления файла в /etc/logrotate.d для вашей собственной конфигурации.

существует множество примеров в /etc / logrotate.d.

Он ждет от вас приложение для записи в один файл. Это не для приложения, которое каждый день входит в другой файл журнала. Приложение обычно не должно этого делать. Если приложение сохраняет файл журнала открытым, logrotate может запустить сценарий postrotate, чтобы сообщить приложению о повторном открытии файла журнала.

Удаление старых файлов linux по маске чаще всего осуществляется следующим образом:

Веб-сервер указан для примера. Синтаксис очень прост — команда принудительно удалит все файлы с расширением .log в указанном каталоге, при этом удаление будет рекурсивным(-r — recursive) и подтверждения система при этом спрашивать не будет (-f — force).

При удалении таким образом очень большого количества файлов из определенного каталога может выдавать ошибки — причина в том, что система на самом деле не видит маски и разворачивает передаваемое ей выражение — срабатывает ограничение на количество аргументов, и выполнение команды прекращается.

Если rm -rf не помогает — удалять файлы следует в цикле for. Для каждого файла будет отдельная операция удаления и никаких ограничений системы здесь ожидать не приходится.

Синтаксис в простейшем случае может выглядеть так:

for f in /var/log/apache2/*.log; do rm «$f»; done

В цикл for можно добавить любую дополнительную логику.

Удаление старых файлов в Linux по Cron

Логи или другие файлы (сессии РНР) можно удалять как используя циклы (так приходится делать обычно если логов или других файлов накопилось действительно очень много), но если система не запущена или только создается лучше использовать регулярно выполняемое задание Cron, согласно которому с заданной периодичностью будут удаляться файлы определенных типов

В примере удаляются сессии РНР для сайта старше 7 дней.

cron удаление старых файлов

В цикле то же самое можно сделать так:

for f in /tmp/logs/*.log

Приведенное выражение, как и любой другой цикл можно поместить в файл, сделать его исполняемым и с тем же успехом выполнять по Cron

Нужно каждые 6 часов чистить заданную папку от файлов. Нигде не могу найти решение. До этого с кроном не работал

3 ответа 3

команда оболочки для удаления файлов в каталоге (если в этом каталоге нет вложенных каталогов):

вот эту команду и надо выполнять, указав её периодичность. т.е., для «раз в шесть часов» строчка в файле crontab должна выглядеть примерно так:

т.е., в 0 минут каждые шесть часов (второе поле — */6 ) каждый день месяца (третье поле — * ) каждый месяц (четвёртое поле — * ) независимо от дня недели (пятое поле — * ) выполнять команду rm . (последнее, шестое поле).

Блог посвященный системному администрированию

19 июл. 2013 г.

Удаление старых файлов одной командой в Linux

С помощью команды find легко удалять или перемещать или копировать файлы, с датой модификации старше заданной. Удобно помещать такую команду в cron.

Например, для файлов старше 5 дней:

find /path/to/files* -mtime +5 -exec rm <> ;

Для файлов, измененных в пределах 24. 48 часов:

Читайте также: