Mac Terminal - Beibehaltung der letzten 6 Zeichen umbenennen

1

Ich verwende das eingebaute Terminal und bin mit dieser Codierung völlig neu, daher muss ich genau wissen, was ich eingeben soll, wenn ich das Terminal öffne. Bitte leiten Sie mich auch nicht zu einer anderen Software weiter. Also sagen wir mal ...

  • Ich habe einen Ordner mit dem Namen "Power" auf meinem Desktop (natürlich ohne die Anführungszeichen).

  • In diesem Ordner befinden sich mehrere TIF-Dateien mit folgendem Namen:

    • Washington, George-150987.tif
    • Lincoln, Abraham-755103.tif
    • Smith, Jack & Jill-102347.tif
    • Jones-Newman, Martha & John Newman-137881.tif
  • Diese Namen haben eines gemeinsam. Sie haben alle eine 6-stellige Nummer vor der Nebenstelle und werden es immer tun.

  • Ich möchte eine Möglichkeit zum Batch-Umbenennen einer großen Gruppe dieser Dateien mit nur den letzten 6 Ziffern. Zur Hölle, wenn es einen Code gibt, der sich umbenennen lässt und nur Zahlen enthält, dann ist das DER BESTE, denn in seltenen Fällen kann es einen geben

    Smith, Jane-108965 (Frau) .tif

Aber wenn es keinen Code dafür gibt, ist das in Ordnung, ich kann eine andere Software verwenden, um das (Frau) in einer Sekunde loszuwerden.

Jaron Burnette
quelle
Nur ein kleiner nitpick für Ihre Learnings, wäre es nicht aufgerufen werden , codesondern command, was in einem kombiniert werden können script. Da Sie bereits vorhandene Anwendungen und Dienstprogramme verwenden
crasic

Antworten:

6

Machen Sie zuerst ein Backup der Dateien!

Öffnen Sie dann Terminal (starten Sie eine bashShell, wenn Sie nicht die Standard-Shell verwenden) und führen Sie sie aus

cd ~/Desktop/Power
\ls | while IFS= read f; do echo mv -vn "$f" "${f/*-/}"; done

Dies wird nichts umbenennen, sondern nur zeigen, wie jede Datei umbenannt wird. Wenn die Ausgabe in Ordnung ist, führen Sie sie aus

\ls | while IFS= read f; do mv -vn "$f" "${f/*-/}"; done

PS: Dies setzt voraus, dass der einzige -in den Dateinamen derjenige ist, der direkt vor der Nummer steht.


Einige Erklärungen, was hier vor sich geht:

  • \lslistet alle Dateien auf, die \dafür sorgen, dass keine Alias-Erweiterung stattfindet. Die Ausgabe wird in eine Pipe eingespeist, aber wir müssen uns nicht um mehrspaltige Ausgaben kümmern, da dies lsin diesen Fällen automatisch vorausgesetzt wird-1
  • while ... do; ...; done Schleifen über alle Zeilen / Dateien
  • IFS= read fLiest einen Dateinamen aus der Standardeingabe in $f. Die IFS=sorgt dafür , dass keiner der Charaktere auf der Standardeingabe verwirrt readin zwei Werte erwartet statt einem (technisch ist dies wahrscheinlich hier nicht erforderlich, aber es ist gute Praxis sowieso)
  • ${f/*-/}Ersetzt die Zeichenfolge durch den Wert von $f. In diesem Fall wird alles bis einschließlich von -durch die leere Zeichenfolge ersetzt. Siehe man bash(Parametererweiterung) für Details.
nohillside
quelle