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

Eliminar ficheiros correspondentes em todas as subdirectorias

Advertisement

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

Advertisement
Advertisement

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
Advertisement
4
4
2010-02-22 14:11:50 +0000
Advertisement
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
Advertisement
0
0
2019-11-17 04:04:10 +0000
Advertisement

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

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

Questões relacionadas

6
10
11
5
8
Advertisement
Advertisement