У нас есть простые скрипты, которые предполагают удаление старых папок. Проблема в том, что он не удаляет их рекурсивно.
Это команда:
find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}
Он удаляет файлы и папки, но внезапно пытается удалить файл из каталога, который он уже удалил.
Сервер работает CentOS, а папки монтируются с помощью NFS со склада.
Что мы можем сделать?
Это происходит потому, что rm
получает список всех найденных файлов и каталогов из find
команда. И каталоги каталогов в списке расположены перед ними и удаляются файлы рекурсивно.
Могу предложить два решения:
find
полученные результаты: find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
-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 {} \;
И я думаю, что это действительно лучший способ.