File Rename

F

fabio_a

Grünschnabel
Hallo

Ich habe einen Ordner mit sehr vielen Dateien, welche ich per Script umbenennen möchte.

Dateinamen alt:
LC Part1 - Part2.pdf

Dateinamen neu:
LC Part2 - Part1.pdf

Das heisst ich möchte bei jeder Datei Part1 (das was zwischen "LC " und " - " steht) und Part2 (das was nach " - " steht) vertauschen.

Ich denke, dass es mit einer for f in * Schleife und dem Befehl mv in Kombination mit sed machbar sein sollte. Aber bei sed beisse ich mir die Zähne aus... Kann jemand helfen?

Danke
 
Wie wäre es damit?

Code:
for FL in *; do
  NEWNAME=$(echo "$FL" | sed 's/LC \(.*\) - \(.*\).pdf/LC \2 - \1.pdf/g')
  mv "$FL" "$NEWNAME"
done

Vorausgesetzt du befindest dich in besagtem Verzeichnis und es gibt dort keine Unterverzeichnisse. Ansonsten müsste man wohl mit find arbeiten.

Viele Grüße,
Pik-9

PS: Es lohnt sich wirklich, sich ein Bisschen in sed einzulesen, denn wenn man den Umgang damit meistert, hat man ein wirklich mächtiges Konsolenwerkzeug zur Hand!
https://tty1.net/sed-tutorium/sed-tutorium.html :rtfm:

PSS: @marce @floyd62 Ihr habt Recht: mit einem * statt $(ls) ist es tatsächlich besser. Zur Erklärung: Ich habe meinen Code zwar getestet, allerdings hatte ich in meinen Dateinamen alle Leerzeichen durch _ ersetzt! :erschlag:
 
Zuletzt bearbeitet:
da fehlt vermutlich auf jeden Fall ein Quoting wenn da Leerzeichen im Dateinamen sind...
 
Hi,

zum Umbenennen von mehreren Datein ist manchmal "mmv" ganz hilfreich. Eventuell reicht ja etwas wie
Code:
mmv "LC*-*.pdf" "LC#2-#1.pdf"
schon aus; vorher testen mit
Code:
mmv -n "LC*-*.pdf" "LC#2-#1.pdf"

@marce,

ja, einfacher und zuverlässiger wäre wohl
Code:
for FL in *; do
...
Das erledigt die Shell intern, und es wird nicht das Ergebnis eines externen Kommandos (ls) nochmal geparst.
 

Ähnliche Themen

Letzten Tag löschen

Kopieren von Dateien per Shell

Umlaute und so umbenennen... - ntfs probleme?

sed / Variable in mehreren Dateien ersetzen

evt. charset problem

Zurück
Oben