Как найти и удалить файлы старше конкретной даты в linux

удалить файлы и папки старше N дней, удалить файлы и папки за исключением, найти файлы и папки старше N дней, удалить пустые файлы и папки

Как найти и удалить файлы старше конкретной даты в 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
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделитесь с друзьями:
Технарь
Добавить комментарий

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