Como posso remover os arquivos indesejados com a marca til usando o comando linux?

0

Aqui eu quero remover todos os arquivos til dos meus diretórios e subdiretórios. Como posso usar o comando linux aqui?

Estrutura de árvore:

.
|-- Block_Physical_design_checklist
|   |-- Block_Physical_design_checklist.config
|   |-- Block_Physical_design_checklist.html
|   |-- Block_Physical_design_checklist.html~
|   '-- rev6
|       |-- rev6.config
|       '-- rev6.html
|-- CAD_checklist
|   |-- CAD_checklist.config
|   |-- CAD_checklist.html
|   |-- CAD_checklist.html~
|   '-- rev6
|       |-- rev6.config
|       '-- rev6.html
|-- Formality_DCT_Vs_ICC
|   |-- Formality_DCT_Vs_ICC.config
|   |-- Formality_DCT_Vs_ICC.html
|   |-- Formality_DCT_Vs_ICC.html~
|   '-- rev6
|       |-- rev6.config
|       |-- rev6.html
|       '-- rev6.html~

Estrutura de árvore esperada:

.
|-- Block_Physical_design_checklist
|   |-- Block_Physical_design_checklist.config
|   |-- Block_Physical_design_checklist.html
|   '-- rev6
|       |-- rev6.config
|       '-- rev6.html
|-- CAD_checklist
|   |-- CAD_checklist.config
|   |-- CAD_checklist.html
|   '-- rev6
|       |-- rev6.config
|       '-- rev6.html
|-- Formality_DCT_Vs_ICC
|   |-- Formality_DCT_Vs_ICC.config
|   |-- Formality_DCT_Vs_ICC.html
|   '-- rev6
|       |-- rev6.config
|       |-- rev6.html
    
por salma 05.07.2017 / 06:36

3 respostas

1

Sua abordagem find . -type f -name '*~' -exec rm -f '{}' \; tem alguns problemas / escopos de melhoria:

  • -name '*~' corresponde apenas aos arquivos que terminam em ~ ; se você quiser corresponder qualquer arquivo contendo ~ , use *~*

  • -exec rm -f '{}' \; está gerando rm para cada arquivo, que é desajeitado e ineficiente; em vez disso, como rm pode receber vários arquivos como argumentos, você pode informar find ... -exec para obter tantos arquivos de uma só vez sem acionar ARG_MAX usando o argumento + para -exec

Colocando esses dois juntos:

find . -type f -name '*~*' -exec rm -f {} +

Se acontecer de você ter o GNU find , você pode usar a ação -delete :

find . -type f -name '*~*' -delete

Em zsh , você pode fazer correspondência de padrão recursivo e remoção de uma só vez como:

rm -f -- **/*~*(.)

o modificador% glob. corresponde apenas a arquivos regulares.

    
por 05.07.2017 / 06:44
1

Com a opção globstar do bash:

shopt -s globstar ; rm ./**/*~

globstar permite a globalização recursiva com ** , enquanto ./ evita problemas com nomes de arquivos que podem ter um - inicial e *~ corresponderá a nomes de arquivos terminados com til

    
por 05.07.2017 / 07:13
0

Aqui está a minha resposta,

find . -type f -name '*~' -exec rm -f '{}' \;
    
por 05.07.2017 / 06:38