Renomeia vários arquivos via shell script

2

Eu quero renomear os seguintes arquivos 0, 0,001, 0,002, 0,003 ..., 0,035

em 0, 1, 2, 3 ..., 35

Como posso fazer isso?

    
por Konstantinos Giannokostas 17.07.2016 / 13:46

2 respostas

3

bash solution (desde que a opção de shell extglob esteja ativada - consulte manual de correspondência de padrões )

for i in 0.* ; do mv "$i" "${i##0.*(0)}" ; done
  • ${i## excluir a correspondência mais longa do início da variável i
  • 0. corresponde à sequência de caracteres 0.
  • *(0) significa zero ou mais ocorrências de 0

ou esta solução sugerida pelo @Costas, que não precisa da opção extglob

for i in 0.* ; do mv "$i" "${i#${i%%[!0.]*}}" ; done
  • ${i%% excluir a correspondência mais longa do final de i variable
  • * qualquer caractere, zero ou mais vezes
  • [!0.] caracteres diferentes de 0.
  • Portanto, ${i%%[!0.]*} exclui efetivamente do primeiro caractere não 0 ou . até o final. Por ex: 35 é excluído para 0.035 , 1 para 0.001 , str0.00456a para 0str0.00456a e sequência inteira para str0.00456a
  • os caracteres restantes (ex: 0.0 para 0.035 e 0.00 para 0.001 são passados para ${i# , que exclui esses caracteres do início da variável, resultando em 35 para 0.035 e 1 para 0.001

Outras leituras: Expansão de Parâmetros

    
por 17.07.2016 / 14:40
1

com rename ( prename ):

rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*

-n fará o teste, se você estiver satisfeito com as mudanças a serem feitas, faça:

rename 's/^[^.]+\.0*([1-9]+)$/$1/' 0*

Exemplo:

% rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*
0.001 renamed as 1
0.002 renamed as 2
0.003 renamed as 3
0.035 renamed as 35
    
por 17.07.2016 / 13:51