2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

Eliminar ficheiros correspondentes em todas as subdirectorias

Como posso remover todos os ficheiros .swp em todas as minhas subdirectorias sob Linux?

Respostas (5)

147
147
147
2010-02-22 13:59:15 +0000

Remover todos os ficheiros *.swp sob o directório actual, usar o comando find numa das seguintes formas:

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

A opção -delete significa encontrar irá apagar directamente os ficheiros correspondentes. Esta é a melhor correspondência com a pergunta real do OP.

Usando a opção -type f significa que o find só processará ficheiros.

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

Opção -exec permite encontrar executar um comando arbitrário por ficheiro. A primeira variante executará o comando uma vez por ficheiro, e a segunda executará o menor número possível de comandos, substituindo {} por tantos parâmetros quanto possível.

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

Piping the output to xargs é utilizado de forma mais complexa por comando de ficheiro do que é possível com -exec. A opção -print0 diz find para separar as correspondências com ASCII NULL em vez de uma nova linha, e -0 diz xargs para esperar uma entrada separada NULL. Isto torna a construção do tubo segura para nomes de arquivo que contenham espaço em branco.

Ver man find para mais detalhes e exemplos.

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

Tendo encontrado fazer o apagamento por si só eliminar qualquer risco de espaço embutido no nome do ficheiro, … Para segurança extra, considere também adicionar -type f apenas para ficheiros.

4
4
4
2010-02-22 14:11:50 +0000
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
2
2
2
2010-02-22 14:04:52 +0000

Para pesquisar sob o meu directório home (e utilizando o GNU ‘find’ e ‘xargs’), eu utilizaria:

find $HOME -name '*.swp' -print0 | xargs -0 rm -f

A utilização de ‘-print0’ e ‘-0’ significa que os nomes serão delimitados por caracteres ASCII NUL ‘\0’, e isto tratará de caminhos de ficheiros com espaços em branco, etc. nos nomes. Se pensa que poderá ter directórios (ou ficheiros de dispositivos, ou FIFOs, ou outros não ficheiros) sob o seu directório terminando com ‘.swp’, poderá adicionar a opção ‘-type f’ para ‘find’. Se tiver apenas directórios, o comando acima falhará em removê-los ruidosamente.

0
0
0
2019-11-17 04:04:10 +0000

Se desejar apagar todos os ficheiros de todas as subpastas, pode utilizar o comando fornecido,

$ find . -name \* -type f -delete