Massenumbenennung von Dateien aus Textdateien

Massenumbenennung von Dateien aus Textdateien

Ich habe einen Ordner mit ungefähr 7.000 Dateien und jede Datei ist nummeriert, z. B. 74857.mkv, 74858.mkv usw.

Bildbeschreibung hier eingeben

Ich habe auch eine Textdatei, die alle Dateinummern und Dateinamen enthält:

In dieser Reihenfolge:

Bildbeschreibung hier eingeben

Ich möchte jede Datei von der Nummer in den Namen umbenennen; ein Beispiel:

74857.mkv > Aufgenommen S01 E01.mkv

74858.mkv > Aufgenommen S01 E02.mkv

Bitte alle Befehle, um dies zu tun. Ich habe es manuell gemacht und habe es in 5 Tagen nur geschafft, 50 Dateien zu erstellen!

Antwort1

Vorausgesetzt, dass"sein Name ist ein Beispiel"ist die Zeichenfolge in der Zeile unmittelbar über dem aktuellen .mkvDateinamen, d. h. die angegebene

$ cat file.txt 
Taken S01 E01
74857.mkv
Taken S01 E02
74858.mkv

du willst wirklich

74857.mkv > Aufgenommen S01 E01.mkv

74858.mkv > Aufgenommen S01 E02.mkv

dann mit GNU parallelund mv:

parallel -N2 echo mv -- {2} {1}.mkv < file.txt

Entfernen Sie es, echosobald Sie sicher sind, dass die richtigen Befehle erstellt werden.

Antwort2

Ich würde das in kleinen Chargen machen und mit einer Kopie testen, wenn ich du wäre, aber so etwas sollte dir genügen

while read n; do read f; mv $f "$n.${f##*.}"; done < file

Bevor Sie beginnen, sollten Sie die Ausgabe von

while read n; do read f; echo mv $f "$n.${f##*.}"; done < file > checkfile

Um sicherzustellen, dass Ihre Umbenennungsdatei keine Fehler enthält.

Sicherer ist es, wenn Sie über den Platz und die Zeit zum Kopieren verfügen und Ihre Originale sicher aufbewahren können, bis Sie zufrieden sind...

while read n; do read f; cp $f "/a/safe/location/$n.${f##*.}"; done < file

Notiz

Um den Vorgang umzukehren, müssen Sie nur die Reihenfolge der Namen im mvBefehl umkehren

mv "$n.${f##*.}"  $f

Antwort3

Mit perl:

perl -lne '$dst = "$_.mkv"; $src = <>; chomp $src; rename $src, $dst
  or warn "$src -> $dst: $!\n"' your-file

Mit zsh:

zmodload zsh/files # to get a builtin mv
while IFS= read -ru3 dst && IFS= read -ru3 src; do
   mv -- "$src" "$dst.mkv"
done 3< your-file

verwandte Informationen