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.
code
sonderncommand
, was in einem kombiniert werden könnenscript
. Da Sie bereits vorhandene Anwendungen und Dienstprogramme verwendenAntworten:
Machen Sie zuerst ein Backup der Dateien!
Öffnen Sie dann Terminal (starten Sie eine
bash
Shell, wenn Sie nicht die Standard-Shell verwenden) und führen Sie sie ausDies wird nichts umbenennen, sondern nur zeigen, wie jede Datei umbenannt wird. Wenn die Ausgabe in Ordnung ist, führen Sie sie aus
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:
\ls
listet 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 diesls
in diesen Fällen automatisch vorausgesetzt wird-1
while ... do; ...; done
Schleifen über alle Zeilen / DateienIFS= read f
Liest einen Dateinamen aus der Standardeingabe in$f
. DieIFS=
sorgt dafür , dass keiner der Charaktere auf der Standardeingabe verwirrtread
in 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. Sieheman bash
(Parametererweiterung) für Details.quelle