Bash renomeação múltipla em uma linha: é possível?

0

É possível renomear e substituir na mosca com bash? por exemplo eu tenho

  VTS_01_1.VOB  VTS_01_2.VOB  VTS_01_3.VOB

Eu quero renomear para uso no mencoder com

movie_1.avi movie_2.avi,etc..

Eu sei como substituir o VTS, mas não o VOB, alguém pode ajudar por favor?

for i in  VTS_01_[1-4]*B;do echo ${i/VTS_0?_?.VOB/Movie}.avi;done

me dê

Movie.avi
Movie.avi
Movie.avi
Movie.avi

eu quero

Movie_1.avi
Movie_2.avi
Movie_3.avi
Movie_4.avi

Obrigado por ajudar.

    
por elbarna 04.10.2014 / 23:38

4 respostas

0

BIngo!

for i in  VTS_01_[1-4]*B;do echo mv $i  "$(echo $i|sed 's/VTS/Movie/g;s/VOB/avi/g')";done

É mais útil com comandos como mencoder, etc

    
por 05.10.2014 / 00:32
3

Você pode fazer isso em duas etapas, por exemplo primeiro remova a extensão e, em seguida, substitua o prefixo VTS_01 :

$ for i in VTS_01_[1-4]*B; do b="${i%.VOB}"; echo "${b/VTS_01/Movie}.avi"; done
Movie_1.avi
Movie_2.avi
Movie_3.avi
    
por 05.10.2014 / 00:03
2

Use o programa renomear . Ele usa expressão perl. Como sempre aqui não temos expressão complexa.

Neste caso, você pode usar isto:

rename VTS_01 movie VTS_01*VOB
    
por 04.10.2014 / 23:46
1

Por que você não usa python? Algo como

$ ipython
In [1]: import os
In [2]: all_files = os.listdir(".")
In [3]: for filename in all_files:
In [4]:     newname = 'Movie' + filename[6:9] + 'avi'
In [5]:     os.rename(filename, newname)

deve resolver seu problema.

    
por 04.10.2014 / 23:52

Tags