Como usar a expansão do parâmetro bash shell para manipulação de nome de arquivo

0

Gostaria de renomear uma lista de MP3 no mesmo diretório, como:

001 - toto1.mp3
002 - toto3.mp3
003 - toto5.mp3
004 - toto7.mp3
005 - toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3

Eu tentei este exemplo de comando:

for i in *.mp3 ; do echo "${/[0-9]-/i}" ; done 

Eu tenho

bash: ${/[0-9]-/i}: bad substitution

Eu gostaria desse resultado:

toto1.mp3
toto3.mp3
toto5.mp3
toto7.mp3
toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3

Obrigado

    
por dubis 04.12.2017 / 19:34

2 respostas

3

Você definiu uma variável i para cada nome de arquivo no loop, mas o expansão de parâmetro espera ver o nome da variável imediatamente após o ${ ; em vez disso, você colocou no final, pouco antes da chave de fechamento.

Como você deseja remover apenas o texto da frente do nome do arquivo, use esta sintaxe:

for i in *.mp3 ; do echo "${i#[0-9][0-9][0-9] - }" ; done 

que removerá 3 dígitos principais seguidos por espaço de traço no espaço.

    
por 04.12.2017 / 20:00
-3

Mencione todos os nomes de arquivos no arquivo test.txt

$ cat test.txt
001 - toto1.mp3
002 - toto3.mp3
003 - toto5.mp3
004 - toto7.mp3
005 - toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3

O comando a seguir procurará por arquivos que tenham problemas e os renomeie para o nome correto

cat test.txt | sed -n '/^0\{2\}/p' | awk '{print "mv" " " $0 " " $3}' |
sed "s/ /&'/1" | sed "s/.mp3/&'/1" | sh
toto1.mp3
toto3.mp3
toto5.mp3
toto7.mp3
toto9.mp3
    
por 04.12.2017 / 21:29