find - найти и удалить файлы старше конкретной даты

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 {} \;