Script de shell Bash para remover um guia dentro de um nome de arquivo

0

Estou tentando substituir um guia sem hifens de alguns nomes de arquivos.

Eu tenho o regex feito, eu acho, no entanto eu não consigo obter o escape correto ou os comandos de substituição para trabalhar uns com os outros.

Aqui está o meu regex

link

(-[0-9a-f]{32})

Com nomes de arquivos como este

iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png

Eu vi esta resposta Bash shell script para localizar e remover substring dentro de um nome de arquivo , mas não é exatamente o mesmo ...

Acho que isso deve funcionar, mas não se queixa de um erro?

newname='echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/.png/''
    
por Jules 21.05.2017 / 21:46

2 respostas

1

Usando manipulações de string no shell:

for name in *.png; do
    # remove everything after the last '-' including the dash
    # and add the '.png' extension back
    newname="${name%-*}.png"
    echo mv "$name" "$newname"
done

Isso pressupõe que todos os arquivos que você gostaria de renomear são .png arquivos no diretório atual.

Execute esta vez e remova o echo se parecer que está fazendo a coisa certa.

    
por 21.05.2017 / 22:06
3

Em sed BRE (expressões regulares básicas), você também deve escapar de chaves {} :

newname='echo "$filename" | sed 's/-[0-9a-f]\{32\}//g''

Para mover / renomear o arquivo:

mv "$filename" "$newname"
    
por 21.05.2017 / 21:58