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 等指令更有用

相關內容