Como posso remover todos os arquivos .swp em todos os meus subdiretórios no Linux?
Como posso remover todos os arquivos .swp em todos os meus subdiretórios no Linux?
Respostas:
Remova todos os arquivos * .swp abaixo do diretório atual, use o find
comando de uma das seguintes formas:
find . -name \*.swp -type f -delete
A -delete
opção significa que find excluirá diretamente os arquivos correspondentes. Essa é a melhor correspondência para a pergunta real do OP.
Usar -type f
meios find processará apenas arquivos.
find . -name \*.swp -type f -exec rm -f {} \;
find . -name \*.swp -type f -exec rm -f {} +
A opção -exec
permite localizar para executar um comando arbitrário por arquivo. A primeira variante executará o comando uma vez por arquivo e a segunda executará o menor número possível de comandos, substituindo o {}
maior número possível de parâmetros.
find . -name \*.swp -type f -print0 | xargs -0 rm -f
O canal da saída xargs
é usado para formar comandos por arquivo mais complexos do que é possível com -exec
. A opção -print0
diz find
para separar correspondências com ASCII NULL em vez de uma nova linha e -0
diz xargs
para esperar uma entrada separada por NULL. Isso torna a construção do pipe segura para nomes de arquivos que contêm espaço em branco.
Veja man find
para mais detalhes e exemplos.
Para pesquisar no meu diretório pessoal (e usando o GNU 'find' e 'xargs'), eu usaria:
find $HOME -name '*.swp' -print0 | xargs -0 rm -f
O uso de ' -print0
' e ' -0
' significa que os nomes serão delimitados por caracteres ASCII NUL '\ 0', e isso manipulará os caminhos de arquivos com espaços em branco etc. nos nomes. Se você acha que pode ter diretórios (ou arquivos de dispositivo, ou FIFOs ou outros que não sejam arquivos) no diretório que termina com '.swp', você pode adicionar a -type f
opção ' ' para 'localizar'. Se você tiver apenas diretórios, o comando acima falhará ao removê-los ruidosamente.