У нас есть простые скрипты, которые должны удалять старые папки. Проблема в том, что они не удаляют их рекурсивно.
Вот команда:
find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}
Он удаляет файлы и папки, но внезапно пытается удалить файл из каталога, который он уже удалил.
Сервер работает.CentOS, а папки монтируются с помощьюНФСиз хранилища.
Что мы можем сделать?
решение1
Это происходит потому, что rm
получает список всех найденных файлов и каталогов от find
команды. А каталоги в списке располагаются перед ними и удаляются файлы рекурсивно.
Я могу предложить два решения:
- Сортироватьрекурсивный
find
Результаты:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
- Используйте
-delete
опцию вместо внешнегоrm
инструмента.find $PWD -maxdepth 5 -mtime +80 -delete
ОБНОВЛЕНИЕ.1 Как предполагает@Димитарможно добавить -type d
тогда find будет работать только с каталогами. Это может быть быстрее, но в этом случае вы не очищаете старые файлы в $PWD
каталоге.
find $PWD -maxdepth 5 -mtime +80 -type d | xargs -I{} rm -Rvf {}
ОБНОВЛЕНИЕ.2Как предполагает@ezra-sВы можете сделать это без xargs
:
find $PWD -maxdepth 5 -mtime +80 -exec rm -Rvf {} \;
И я думаю, что это действительно лучший способ.