Назад | Перейти на главную страницу

Команда find и rm не удаляет рекурсивно

У нас есть простые скрипты, которые предполагают удаление старых папок. Проблема в том, что он не удаляет их рекурсивно.

Это команда:

find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}

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

Сервер работает CentOS, а папки монтируются с помощью NFS со склада.

Что мы можем сделать?

Это происходит потому, что rm получает список всех найденных файлов и каталогов из find команда. И каталоги каталогов в списке расположены перед ними и удаляются файлы рекурсивно.

Могу предложить два решения:

  1. Сортировать рекурсивный find полученные результаты: find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
  2. Использовать -delete вариант вместо внешнего rm инструмент. find $PWD -maxdepth 5 -mtime +80 -delete

UPD.1 Как предлагает @Dimitar можете добавить -type d тогда find будет работать только с каталогами. Это может быть быстрее, но в этом случае вы не очищаете старые файлы в $PWD каталог.

find $PWD -maxdepth 5 -mtime +80 -type d | xargs -I{} rm -Rvf {}

UPD.2 Как предлагает @ ezra-s ты можешь обойтись без xargs:

find $PWD -maxdepth 5 -mtime +80 -exec rm -Rvf {} \;

И я думаю, что это действительно лучший способ.