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 rm
recebe uma lista de todos os arquivos e diretórios encontrados no find
comando. E diretórios diretórios na lista localizados na frente deles e arquivos excluídos recursivamente.
Posso oferecer duas soluções:
- Organizarrecursivo
find
resultados:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
- Use
-delete
a opção em vez da ferramenta externarm
.find $PWD -maxdepth 5 -mtime +80 -delete
UPD.1 Como sugere@Dimitarvocê pode adicionar -type d
e encontrar irá operar apenas com diretórios. Pode ser mais rápido, mas neste caso você não limpa arquivos antigos no $PWD
diretó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.