Bash shell script para remover um guid dentro de um nome de arquivo

Bash shell script para remover um guid dentro de um nome de arquivo

Estou tentando substituir um guid sem hífens em alguns nomes de arquivos.

Eu fiz o regex, eu acho, mas não consigo fazer com que o escape correto ou os comandos de substituição funcionem uns com os outros.

Aqui está minha regex

https://regex101.com/r/SiqsjP/1

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

Com nomes de arquivos como este

iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png

eu vi essa respostaBash shell script para localizar e remover substring dentro de um nome de arquivomas não é exatamente a mesma coisa...

Acho que deveria funcionar, mas não reclama de erro?

newname=`echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/\1.png/'`

Responder1

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

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

Para mover/renomear o arquivo:

mv "$filename" "$newname"

Responder2

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ê deseja renomear são .pngarquivos do diretório atual.

Execute isso uma vez e remova echose parecer que está fazendo a coisa certa.

informação relacionada