Множественное переименование в одной строке в Bash: возможно ли это?

Множественное переименование в одной строке в Bash: возможно ли это?

Возможно ли переименовывать и заменять на лету с помощью bash? Например, у меня есть

  VTS_01_1.VOB  VTS_01_2.VOB  VTS_01_3.VOB

Я хочу переименовать для использования в mencoder с

movie_1.avi movie_2.avi,etc..

Я знаю, как заменить VTS, но не VOB.

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

дай мне

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

я хочу

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

решение1

Это можно сделать в два этапа, например, сначала удалить расширение, а затем заменить 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

решение2

Использоватьпереименоватьпрограмма. Она использует выражение perl. Однако здесь у нас нет сложного выражения.

В этом случае вы можете использовать это:

rename VTS_01 movie VTS_01*VOB

решение3

Почему вы не используете python? Что-то вроде

$ 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)

должно решить вашу проблему.

решение4

Бинго!

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

Более полезен с командами типа mencoder и т. д.

Связанный контент