como substituir um caractere em um conjunto de nomes de arquivos? [duplicado]

0

Eu tenho um conjunto de imagens assim:

01-12_13:20:12_1366x768.png  01-12_13:20:46_1366x768.png  01-12_13:21:01_1366x768.png  01-12_13:21:06_1366x768.png
01-12_13:20:40_1366x768.png  01-12_13:20:47_1366x768.png  01-12_13:21:02_1366x768.png  01-12_13:21:07_1366x768.png
01-12_13:20:42_1366x768.png  01-12_13:20:49_1366x768.png  01-12_13:21:03_1366x768.png  01-12_13:21:08_1366x768.png
01-12_13:20:44_1366x768.png  01-12_13:20:59_1366x768.png  01-12_13:21:04_1366x768.png  01-12_13:21:10_1366x768.png
01-12_13:20:45_1366x768.png  01-12_13:21:00_1366x768.png  01-12_13:21:05_1366x768.png

Eu preciso substituir cada : para _ . Como posso fazer isso usando comandos bash?

(note : i love when everything is compact and one-lined)

    
por vdegenne 12.01.2017 / 14:00

2 respostas

4

Você pode usar um loop simples, glob e expansão de parâmetros para conseguir isso:

for f in *:*.png; do mv -- "$f" "${f//:/_}"; done
    
por 12.01.2017 / 14:06
3

O loop for é uma solução possível, mas eu prefiro rename .

rename "s/:/_/g" *

Esta ferramenta renomeia vários arquivos de acordo com a regra regex que é fornecida.

    
por 12.01.2017 / 14:06