Mehrfaches Umbenennen in Bash in einer Zeile: ist das möglich?

Mehrfaches Umbenennen in Bash in einer Zeile: ist das möglich?

Ist es möglich, mit Bash spontan umzubenennen und zu ersetzen? Ich habe zum Beispiel

  VTS_01_1.VOB  VTS_01_2.VOB  VTS_01_3.VOB

Ich möchte für die Verwendung in mencoder umbenennen mit

movie_1.avi movie_2.avi,etc..

Ich weiß, wie man VTS ersetzt, aber nicht VOB.

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

Gib mir

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

Ich will

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

Antwort1

Sie können dies in zwei Schritten tun, z. B. zuerst die Erweiterung entfernen und dann das VTS_01Präfix ersetzen:

$ 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

Antwort2

VerwendenumbenennenProgramm. Es verwendet Perl-Ausdrücke. Allerdings haben wir hier keinen komplexen Ausdruck.

In diesem Fall können Sie Folgendes verwenden:

rename VTS_01 movie VTS_01*VOB

Antwort3

Warum benutzt du kein Python? So etwas wie

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

sollte Ihr Problem lösen.

Antwort4

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

Ist nützlicher mit Befehlen wie mencoder usw.

verwandte Informationen