Thank you for reading this post, don't forget to subscribe!
Если нужно найти все файлы свыше 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 {} \;
Найти файлы старше 4х дней, добавить их в архив tar.gz и удалить оригинальный файл:
find /var/log/DIR-SOFT/ -type f -mtime +4 -name "*.log*" | grep -v gz | /usr/bin/xargs -I{} /bin/sh -c '/usr/bin/tar czf {}.tar.gz {}; rm -rf {}'
Ключи:
-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 — количество дней.
найти и удалить все файлы кроме последнего созданного:
find /dir/ -type f -name java_pid*.hprof -exec stat --format '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | tail -n+2 |awk '{print $4}' -exec rm -rf {} \;
заархивировать все лог файлы, оставив не заархивированными 3 последних дня. и удалять архивные старше 30 дней.
лог файл имеет формат:
our-log.2020-04-22.log
добавляем в cron
* 2 * * * /usr/bin/find /var/log/our-log/ -type f -mtime +2 -name "*.log*" | grep -v gz | /usr/bin/xargs -I{} /bin/sh -c '/usr/bin/tar czf {}.tar.gz {}; rm -rf {}'
* 2 * * * /usr/bin/find /var/log/our-log/ -type f -mtime +30 -name "our-log.*.tar.gz" -exec rm -rf {} \;