Umbenennen einer Datei durch Übergeben einer AWK-Ausgabe an eine *.tsv-Datei

Umbenennen einer Datei durch Übergeben einer AWK-Ausgabe an eine *.tsv-Datei

Habe Daten und *.tsveine Datei, in der die Daten beschrieben sind. Möchte die Beschreibung verwenden und die Daten entsprechend umbenennen.

Bitte guck dir das an :

  • awkDer 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 *.mp3befindet:

    for i in *.mp3 ; do
    echo $i
    
  • mvist 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, echowenn 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 mvfehlschlägt, da die Originaldatei bereits gelöscht ist, wenn die Skriptausführung diese Zeile erreicht. Sie können verwenden, um set -esofort zu beenden, nachdem der erste mvFehler fehlgeschlagen ist.

verwandte Informationen