Removendo arquivos nomeados numericamente com mais de n casas decimais

0

Eu tenho arquivos de dados nomeados por uma etapa de tempo, como:

0.01  
0.02  
0.03  
0.04  
0.05  
0.06  
0.07  
0.08  
0.09  
0.1  
0.11
...
0.99
1
1.01
...
1000

Como você pode ver, alguns nomes de arquivos de dados têm dois dígitos após a casa decimal, enquanto outros têm 1 ou nenhuma casa decimal. Eu só quero remover os arquivos que têm dois nomes de casas decimais (por exemplo, 0,01, 0,02, etc), mantendo todos os arquivos que têm menos de duas casas decimais. Então, no final, quero manter o arquivo rotulado como:

0.1
0.2
...
0.9
1
1.1
...
1000

mas remova o resto.

Como posso remover arquivos nomeados numericamente com menos de n casas decimais?

    
por Paul 07.11.2016 / 20:50

2 respostas

1

Não tenho certeza do que você está perguntando. Você pede que ambos os arquivos removam com menos de 2 dígitos após o decimal e mantenha arquivos com menos de 2 dígitos após o decimal.

Supondo que você esteja usando o shell bash. A resposta será alterada para diferentes shells.

Se você quiser remover todos os arquivos com menos de 2 dígitos após o decimal:

shopt -s extglob
rm !(*.[0-9][0-9])

Se você quiser manter todos os arquivos com menos de 2 dígitos após o decimal:

rm *.[0-9][0-9]
    
por 07.11.2016 / 21:15
1

Isto:

$ rm +([0-9]).[0-9][0-9]

Removerá todos os arquivos com um (ou mais) dígitos antes do ponto e exatamente dois decimais.

Isso deve ser executado no bash, já que o extglog é definido por padrão para shells interativos, mas se você precisar usá-lo em um script, use:

shopt -s extglog
rm +([0-9]).[0-9][0-9]
    
por 07.11.2016 / 22:15