Mehrere Dateien umbenennen
Vorwort: Nein, mein Blog ist nicht tot. Juni ist halt Uni-Monat, das ist auch der Grund warum ich nicht am Linuxtag in Karlsruhe bin. *schnief*
Oft hat man viele Dateien und möchte diese nach einem bestimmten Schema umbenennen. Je nach Wissensstand und Situtation gibt es dafür mehrere Möglichkeiten. Ein paar dieser möchte ich hier mal kurz vorstellen.
Wir konstruieren eine einfache Ausgangssituation:
cd /tmp && touch foo1 foo2 foo3
Diese wollen wir jetzt in bar1, bar2 und bar3 umbenennen. Eine primitive Shelllösung wäre z.B.:
for i in foo* ; do mv "$i" "bar${i/foo}" ; done
Dann gibt es die renameutils bestehend aus 3 Tools: imv, qmv und deurlname. Während man mit imv eine Datei via GNU readline interaktiv umbenennen kann und man mit deurlname “URL-encoded characters” aus Dateinamen entfernen kann, bearbeitet man mit qmv die Dateinamen in einem Editor. Einfach mal ausprobieren ($EDITOR setzen nicht vergessen):
qmv foo*
Weiters gibt es auch noch prename aus dem perl-Paket (zumindest auf Debian auch direkt als ‘rename’ aufzurufen):
prename 's/foo/bar/' foo*
Nicht zu vergessen ist natürlich mmv:
mmv "foo*" "bar#1"
Für die Emasc-Jünger gibt es dann auch noch wdired.el aus emacs-goodies-el. Und für die zsh-Liebhaber gibt es natürlich zmv:
zmv 'foo(*)' 'bar$1'
Mehr Anwendungsbeispiele zu zmv gibt es übrigens in der zsh-lovers-manpage.
Ach ja, und weil ich so oft Windows-User als Mausschubser sehe: HOW TO: benennen Sie mehrere Dateien In Windows XP mit Windows-Explorer um.
Hab ich abseits von Perl-Einzeilern und echo/sed-Konstruktionen noch was vergessen? ;-)
June 23rd, 2005 at 22:28
Nette Zusammenfassung! Vielleicht komm ich jetzt mal vom reflexhaften ‘for .. do; .. ;done’ los :-)
btw: in den letzten 3 Bsp. bennenst du bar* in foo* um, statt umgekehrt.
June 23rd, 2005 at 23:14
> Nette Zusammenfassung! Vielleicht komm ich jetzt mal vom
> reflexhaften ‘for .. do; .. ;done’ los :-)
Freut mich dass es dir hilft. Wichtig ist, dass man ein Tool verwendet dass man dann auf den Arbeitsumgebungen auch wirklich vorfindet. :)
> btw: in den letzten 3 Bsp. bennenst du bar* in foo* um,
> statt umgekehrt.
Upps, danke für den Hinweis. Ich habs jetzt still und heimlich korrigiert :)