Bash で 1 行に複数の名前変更を行うことは可能ですか?

Bash で 1 行に複数の名前変更を行うことは可能ですか?

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

これを 2 つの手順で実行できます。まず拡張子を削除し、次に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などのコマンドを使用するとより便利になります

関連情報