Como remover arquivos usando o parâmetro multiple -name do find?

2

Como remover arquivos, contendo til no nome do arquivo ou extensão, de forma recursiva?

Por exemplo, arquivos do vim, com os nomes como .my_file.c.un~ ?

Estou usando essa sequência de localização para isso:

find . -name "*.un~" -o -name "*.swo" -o -name "*.swp" -exec rm -f {} \;

Mas não remove os arquivos. Ainda executando apenas um find puro exibindo uma lista dos arquivos corretamente:

./.my_file.c.un~
./.my_file.c.swp
./.file2.c.un~

Além disso, removê-los com o rm -f .my_file.c.un~ puro funciona perfeitamente. Alterar o -exec rm -f {} \; para o -delete ainda não ajuda.

    
por Anton Kochkov 23.09.2015 / 23:40

1 resposta

3

Quando você usa várias operações lógicas, é necessário agrupá-las entre parênteses, conforme abaixo:

find . \( -name "*.un~" -o -name "*.swo" -o -name "*.swp" \) -delete

onde você tem que barra invertida ou citar os colchetes ( '(' ... ')' ) para evitar a análise desses caracteres especiais pelo shell.

No exemplo acima, estou usando -delete em vez de -exec rm -f {} , que remove automaticamente o arquivo, para que você não precise se preocupar com arquivos com espaços, caso contrário, ele pode acabar bad para você.

Para mais exemplos de sintaxe, verifique man find .

Veja também:

por 24.09.2015 / 02:25