Wie kann ich eine geordnete Liste von Dateien in eine geordnete Liste von Dateinamen umbenennen?

Ich habe eine Reihe von Dateien. Ich muss eine Reihe von Dateinamen anwenden.

So,

  • 001.jpg -> apfel.jpg
  • 002.jpg -> Banane.jpg
  • 003.jpg -> orange.jpg
  • usw.

Ich muss dies für jeden der 16 Ordner mit 292 Dateien pro Ordner wiederholen. Die Dateien sind immer in der richtigen nummerierten Reihenfolge, aber nicht immer mit denselben Namen (die erste Serie ist 001.jpg-292.jpg, dann 293.jpg-584.jpg usw.). Die bereitgestellten Namen sind für die Dateien in allen 16 Ordnern gleich.

Ich sehe, dass dies mit Apps wie A Better Finder Rename möglich (und ziemlich einfach!) ist , aber ich bin nicht scharf darauf, die 20 Dollar für all diese Funktionen auszugeben, nur um eine Sache zu tun, von der ich nicht erwarte, dass ich sie jemals haben werde nochmal machen :D

Gibt es also eine Art kostenlose Option wie Automator, ein Applescript oder ein Shell-Skript?

Ich habe mehrere Shell-Skripte gefunden, die dieselbe Aktion für alle Dateien wiederholen, aber ich weiß nicht genug, um sie zu bearbeiten und für jede Umbenennungsoperation einen neuen Namen anzugeben. :(

Selbst wenn ich ein Skript mit mehr als 292 Zeilen erstellen und die Namensliste fest codieren müsste, wäre das einfacher, als sie alle einzeln im Finder manuell umzubenennen!

Antworten (2)

Speichern Sie diese Datei beispielsweise als filenames.txt:

apple
banana
orange

Öffnen Sie dann das Terminal und führen Sie Folgendes aus:

a=($(<filenames.txt));for d in *;do i=0;for f in $d/*;do echo mv $f $d/${a[i++]}.jpg;done;done

Entfernen Sie echo, wenn die Ausgabe richtig aussieht.

Wenn die Dateinamen Leerzeichen enthalten, fügen Sie IFS=$'\n';am Anfang hinzu und fügen Sie doppelte Anführungszeichen um die Variablen ein.

Danke! Das funktioniert fast. Das einzige Problem ist, dass es den ersten Namen in filenames.txt für alle 292 Dateien verwendet! …irgendwelche Ideen?
Haben Sie das Arbeitsverzeichnis in den Ordner geändert, der die anderen Ordner enthält? Oder wenn Sie das Skript in jedem Ordner separat ausführen müssen, entfernen Sie den for d in *;Teil und ;donevom Ende.
Ich habe den Befehl bearbeitet und am Ende eine Ausgabe wie „mv 001.jpg apple.jpg; mv 002.jpg apple.jpg; mv 003.jpg apple.jpg…“ usw.

Was habe ich getan:

  • Fügen Sie die Liste der alten Namen in die zweite Spalte einer Tabelle ein.
  • Fügen Sie die Liste der neuen Namen in die dritte Spalte ein
  • Überprüfen Sie, ob die Paarübereinstimmung korrekt ist
  • mvin jede Zelle der ersten Spalte eintragen
  • Wenn ein Dateiname Leerzeichen enthält, maskieren Sie sie mit\
  • Fügen Sie den gesamten Inhalt der Tabelle in ein Skript ein
  • Wenn Sie zsh nicht verwenden, ändern Sie alle Tabulatoren in Leerzeichen
  • chmod o+xauf dem Drehbuch
  • Führen Sie das Skript aus
Cool. Zwei Antworten, und die, die tatsächlich funktioniert, wird abgelehnt.