bash substitui parte da cadeia baseada na localização [duplicada]

1

Eu procurei por uma solução de uma linha (como o bash oferece) para substituir parte do nome do arquivo.

Dado que uma pasta tem sequência de imagens como

ve2_sq021_sc001_v000.0101.jpg
ve2_sq021_sc001_v000.0102.jpg
ve2_sq021_sc001_v000.0103.jpg
ve2_sq021_sc001_v000.0104.jpg

Precisa substituir somente v000 por v09 (digamos). Como é possível (em todo diretório).

    
por nish 11.02.2014 / 09:22

2 respostas

3

Se você tem o comando unix rename instalado, você pode fazer isso trivialmente assim:

$ rename v000 v09 *.jpg

$ ls -1
ve2_sq021_sc001_v09.0101.jpg
ve2_sq021_sc001_v09.0102.jpg
ve2_sq021_sc001_v09.0103.jpg
ve2_sq021_sc001_v09.0104.jpg

NOTA: Isso está usando a implementação rename incluída no pacote util-linux .

    
por 11.02.2014 / 09:39
1
for f in $(ls ve2*); do mv $f $(echo $f | sed s/v000/v09/g ); done

Se você quiser torná-lo recursivo, você pode usar o find ao invés de ls ve2 *

    
por 11.02.2014 / 09:44

Tags