Comando Find e rm não excluindo recursivamente

Comando Find e rm não excluindo recursivamente

Temos scripts simples que pretendem excluir pastas antigas. O problema é que ele não os exclui recursivamente.

Este é o comando:

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

Ele remove os arquivos e pastas, mas de repente tenta remover um arquivo de um diretório já excluído.

O servidor está em execuçãoCentOS, e as pastas são montadas usandoNFSdo armazenamento.

O que podemos fazer?

Responder1

Isso acontece porque rmrecebe uma lista de todos os arquivos e diretórios encontrados no findcomando. E diretórios diretórios na lista localizados na frente deles e arquivos excluídos recursivamente.

Posso oferecer duas soluções:

  1. Organizarrecursivo findresultados:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
  2. Use -deletea opção em vez da ferramenta externa rm.find $PWD -maxdepth 5 -mtime +80 -delete

UPD.1 Como sugere@Dimitarvocê pode adicionar -type de encontrar irá operar apenas com diretórios. Pode ser mais rápido, mas neste caso você não limpa arquivos antigos no $PWDdiretório.

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

UPD.2Como sugere@ezra-svocê pode fazer isso sem xargs:

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

E acho que essa é realmente a melhor maneira.

informação relacionada