
Ich habe einen Ordner mit ungefähr 7.000 Dateien und jede Datei ist nummeriert, z. B. 74857.mkv, 74858.mkv usw.
Ich habe auch eine Textdatei, die alle Dateinummern und Dateinamen enthält:
In dieser Reihenfolge:
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 .mkv
Dateinamen, 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 parallel
und mv
:
parallel -N2 echo mv -- {2} {1}.mkv < file.txt
Entfernen Sie es, echo
sobald 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 mv
Befehl 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