Habe Daten und *.tsv
eine Datei, in der die Daten beschrieben sind. Möchte die Beschreibung verwenden und die Daten entsprechend umbenennen.
Bitte guck dir das an :
awk
Der Befehl zum Filtern des TSV lautet:common_voice_en_22090684.mp3 four common_voice_en_22090691.mp3 no common_voice_en_22090696.mp3 one
Gehen Sie das Verzeichnis durch, in dem sich Folgendes
*.mp3
befindet:for i in *.mp3 ; do echo $i
mv
ist ein Befehl zum Umbenennen der Datei und benötigt zwei Argumente (die zu ändernde Datei und mit was)
Wie verwende ich awk
(um die Beschreibung zu lesen und zu verwenden) und mv
(um die vorhandenen Dateien mit der übergebenen Beschreibung umzubenennen? Wenn wir uns also das obige Beispiel ansehen, wäre das Ergebnis:
four.mp3
no.mp3
one.mp3
Es ist nicht wichtig, die vorgeschlagenen Befehle zu verwenden. Alle Ideen und Vorschläge, wie dies zu tun ist, sind herzlich willkommen!
Antwort1
Dies entspricht zwar nicht Ihren Anforderungen, aber wenn Sie viele Dateien verarbeiten möchten, erzielen Sie möglicherweise eine bessere Leistung, wenn Sie Ihre .tsv-Datei als Treiber anstelle einer Shell-Erweiterung verwenden, da Sie die .tsv-Datei nicht einmal pro MP3 öffnen. Entfernen Sie das, echo
wenn es so aussieht, als würde es Ihren Erwartungen entsprechen.
$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv
Antwort2
IIUC, Sie wollen so etwas wie dies nach dem Speichern der Ausgabe vonawk-Befehl zum Filtern des TSVim Ordner:
#!/usr/bin/env sh
for i in *.mp3
do
new_name="$(awk -v name="$i" '$1 == name {print $2}' file)"
if [ -n "$new_name" ]
then
echo mv -- "$i" "$new_name"
fi
done
Entfernen Sie echo
, um die Umbenennung tatsächlich durchzuführen, aber führen Sie es zuerst damit aus, um sicherzustellen, dass es das tut, was Sie brauchen. Beachten Sie auch, dass es eine geringe Wahrscheinlichkeit gibt, dass es mv
fehlschlägt, da die Originaldatei bereits gelöscht ist, wenn die Skriptausführung diese Zeile erreicht. Sie können verwenden, um set -e
sofort zu beenden, nachdem der erste mv
Fehler fehlgeschlagen ist.