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

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

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

Вот команда:

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

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

Сервер работает.CentOS, а папки монтируются с помощьюНФСиз хранилища.

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

решение1

Это происходит потому, что 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

ОБНОВЛЕНИЕ.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 {} \;

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

Связанный контент