Как найти и удалить файлы старше конкретной даты в Linux
Хочу в этой теме «Как найти и удалить файлы старше конкретной даты в Linux» рассказать как можно найти и удалить определенные файлы по дате в ОС Linux таких как Debian, Ubuntu или Redhat, Centos. На готовых примера покажу что и как нужно делать.
1. Посмотрим список всех файлов в папке с датой изменения, для этого стоит выполнить команду:
# ls -lah /home/captain/
пример использование команды ls -lah для вывода подробной информации о файлах
2. Чтобы узнать сегодняшнюю дату, нужно выполнить:
# date on Jul 14 04:04:52 EEST 2014
3. Команда что выше не вывела полную дату, можно это исправить:
# ls --full-time total 36576 drwxr-xr-x 8 root root 4096 2014-06-06 07:16:21.000000000 +0300 firefox -rw-r--r-- 1 root staff 37445961 2014-06-06 07:21:16.000000000 +0300 firefox-30.0.tar.bz2
4. Допустим нужно найти файлы и удалить их по определенной дате.
Если нужно найти все файлы свыше 3 дня и после чего удалить их:
# find /home/captain -type f -mtime +3 -exec rm -rf {} \;
Если нужно найти все файлы свыше 90 дней и после чего удалить их:
# find /home/captain -type f -mtime +90 -exec rm -rf {} \;
Если нужно найти все файлы свыше 365 дней и после чего удалить их:
# find /home/captain -type f -mtime +365 -exec rm -rf {} \;
Если нужно найти все файлы свыше 100 дней и после чего удалить их:
# find /home/captain -type f -mtime +100 -exec rm -rf {} \;
Удаление файлов старше N дней
$ find /dir/ -atime +N | xargs rm -f
так же:
$ find /dir/ -atime +N -delete
можно еще вот так:
$ find /dir/ -name "*.jpg" -mtime +N -exec rm -f {} \;
Ключи:-name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки.-type — тип искомого: f=файл, d=каталог, l=ссылка (link).-user — владелец: имя пользователя или UID.-group — владелец: группа пользователя или GID.-perm — указываются права доступа.-size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).-atime — время последнего обращения к файлу.-ctime — время последнего изменения владельца или прав доступа к файлу.-mtime — время последнего изменения файла.-newer другой_файл — искать файлы созданные позже, чем другой_файл.-delete — удалять найденные файлы.-ls — генерирует вывод как команда ls -dgils.-print — показывает на экране найденные файлы.-exec command {} \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис.-ok — перед выполнением команды указанной в -exec, выдаёт запрос.-depth — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога.-prune — используется, когда вы хотите исключить из поиска определённые каталоги.N — количество дней. Вот собственно и все, завершил я тему «Как найти и удалить файлы старше конкретной даты в Linux», очень все просто, если знаешь что и как
Спасибо что читаете мой блог https://linux-notes.org
Вот собственно и все, завершил я тему «Как найти и удалить файлы старше конкретной даты в Linux», очень все просто, если знаешь что и как. Спасибо что читаете мой блог https://linux-notes.org
Скрипт удаления файлов старше N дней
Опубликовано muff в Пт, 2015-03-06 19:08
Для бекапирования данных можно использовать как специализированное ПО, так и самописные скрипты.
В случае использования самописных скриптов, возникает необходимость периодически удалять архивы бекапов. Однако и этот процесс можно автоматизировать.
Попытаемся максимально приблизить условия к боевым.
Итак, имеется в наличии сервер, на котором в родительском каталоге (например, /backup) созданы подкаталоги, для хранения бекапов в зависимости от типа содержимого:
- конфигурации маршрутизаторов
- конфигурации коммутаторов
- конфигурации серверов
- данные с серверов
- т.д.
Логика написания скрипта состоит в следующем. В зависимости от типа содержимого, скорости устаревания данных, доступного дискового пространства и т.д, выбираем оптимальное время хранения бекапов в каталогах. После этого необходимо «пройтись» по каталогах и удалить все файлы, которые созданы более чем N дней назад.
Для поиска файлов, которые созданы более чем N дней назад, воспользуемся возможностями утилиты find.
Допустим, необходимо найти в каталоге все файлы, созданные более 25 дней назад:
# find /backup/jun -type f -mtime +25 /backup/jun/juniper.conf.gz_20150209_141842 /backup/jun/juniper.conf.gz_20150209_142441 /backup/jun/juniper.conf.gz_20150209_142733 /backup/jun/juniper.conf.gz_20150209_151936 /backup/jun/juniper.conf.gz_20150209_152555 /backup/jun/juniper.conf.gz_20150209_173457 |
После поиска устаревших файлов, необходимо их удалить. Для этого можно использовать, например, такую конструкцию:
find /backup/jun -type f -mtime +25 -exec rm -f {} \; |
Либо же такую:
find /backup/jun -type f -mtime +25 -print0 | xargs -0 rm -f |
Воспользуемся вторым вариантом и добавим несколько переменных. В результате получаем примерно следующий скрипт:
#!/bin/sh# Путь к утилите поиска FIND="/usr/bin/find" # Путь к утилите удаления RM="/bin/rm" # Путь к утилите xargs XARGS="/usr/bin/xargs" # Список каталогов с архивами бекапов PATH1="/backup/jun" PATH2="/backup/sw" # Время хранения файлов (в днях) TIME1="25" TIME2="60" # Перебираем каталоги и удаляем устаревшие бекапы $FIND $PATH1 -type f -mtime +$TIME1 -print0 | $XARGS -0 $RM -f $FIND $PATH2 -type f -mtime +$TIME2 -print0 | $XARGS -0 $RM -f |
Назовем его, например, remove_old_backups.sh и запустим на выполнение:
# sh /usr/local/etc/remove_old_backups.sh |
После этого проверим наличие файлов старше 25 дней в каталоге /backup/jun:
# find /backup/jun -type f -mtime +25 |
Таких файлов не обнаружено. А вот, для примера, файлы старше 20 дней — присутствуют:
# find /backup/jun -type f -mtime +20 /backup/jun/juniper.conf.gz_20150210_124853 /backup/jun/juniper.conf.gz_20150212_145222 /backup/jun/juniper.conf.gz_20150212_151451 /backup/jun/juniper.conf.gz_20150212_151608 /backup/jun/juniper.conf.gz_20150213_033623 /backup/jun/juniper.conf.gz_20150213_033643 /backup/jun/juniper.conf.gz_20150213_033751 /backup/jun/juniper.conf.gz_20150213_113431 |
Скрипт работает… Модифицируем под свои нужды и пользуемся.
По завершению редактирования, в целях безопасности, выставим необходимые права и разшешения (у меня файлы архивов пишутся от имени пользователя proftpd):
# chown proftpd:proftpd /usr/local/etc/remove_old_backups.sh # chmod 700 /usr/local/etc/remove_old_backups.sh |
Ну и не забываем добавить ежедневный запуск скрипта в планировщик заданий:
# echo ‘# Clear old backups’ >> /etc/crontab # echo ‘2 6 * * * proftpd /bin/sh /usr/local/etc/remove_old_backups.sh’ >> /etc/crontab |