Exclui arquivos correspondentes em todos os subdiretórios

61

Como posso remover todos os arquivos .swp em todos os meus subdiretórios no Linux?

    
por Alex 22.02.2010 / 14:58

4 respostas

115

Remova todos os arquivos * .swp abaixo do diretório atual, use o comando find em um dos seguintes formulários:

  • find . -name \*.swp -type f -delete

    A opção -delete significa que a localização excluirá diretamente os arquivos correspondentes. Esta é a melhor correspondência para a pergunta atual do OP.

    Usar -type f significa que o arquivo somente processará arquivos.

  • find . -name \*.swp -type f -exec rm -f {} \; a find . -name \*.swp -type f -exec rm -f {} +

    A opção -exec permite encontrar 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 de comandos possível, substituindo {} pelo maior número de parâmetros possível.

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

    Piping a saída para xargs é usado para formar comandos por arquivo mais complexos do que é possível com -exec . A opção -print0 informa find para separar correspondências com ASCII NULL em vez de uma nova linha e -0 indica xargs para esperar entrada separada de NULL. Isso torna a construção do pipe segura para nomes de arquivos contendo espaços em branco.

Veja man find para mais detalhes e exemplos.

    
por 22.02.2010 / 14:59
15

find . -name '*.swp' -delete

Após encontrar a exclusão, remova qualquer risco de espaço incorporado no nome do arquivo, ... Para segurança adicional, considere também adicionar -type f somente para arquivos.

    
por 22.02.2010 / 15:07
3
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
    
por 22.02.2010 / 15:11
2

Para procurar em 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á caminhos de arquivo com espaços em branco, etc. nos nomes. Se você acha que pode ter diretórios (ou arquivos de dispositivo, FIFOs ou outros não-arquivos) em seu diretório que termina com '.swp', você pode adicionar a opção ' -type f ' para 'localizar'. Se você tiver apenas diretórios, o comando acima não conseguirá removê-los ruidosamente.

    
por 22.02.2010 / 15:04