unsere besten emails
Registrierung
Teammitglieder
Zur Startseite
Mitgliederliste
Suche
Kalender
Häufig gestellte Fragen
Zum Portal

Dedies-Board » Linux » FAQs » Rekursives Umbenennen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Rekursives Umbenennen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »

Haui Haui ist männlich
Haudegen


images/avatars/avatar-123.jpg

Dabei seit: 29.04.2005
Beiträge: 522

Level: 44 [?]
Erfahrungspunkte: 3.750.574
Nächster Level: 4.297.834

547.260 Erfahrungspunkt(e) für den nächsten Levelanstieg

Rekursives Umbenennen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden   Zum Anfang der Seite springen

Normalerweise schreibe ich ja nichts hier ins Forum, was ich schon gebloggt hab, aber hier mach ich mal eine Ausnahme, weil es sich um ein relativ häufig auftretendes Problem handelt.
Konkret geht es um das Umbenennen von Dateien nach einem bestimmten Schema, wofür sich das kleine Perl-Script rename schon durchaus etabliert hat. Diese Lösung hat nur ein Problem - sie funktioniert nicht rekursiv für Dateien in Unterverzeichnissen. Prinzipiell bietet sich in so einem Fall natürlich immer find mit seiner exec/execdir-Option an. Leider funktioniert diese Lösung hier nicht (warum werde ich hier nicht erläutern, aber das kann der geneigte User ja jederzeit selbst ausprobieren Fröhlich ).
Sicherlich gibt es auch hierfür schon andere fertige Lösungen, aber da ich von der prinzipiellen Funktionsweise von rename begeistert bin, hab ich gestern ein wenig rumgebastelt und eine verbesserte Version von rename erstellt, die um die Möglichkeit erweitert ist, Dateien und Verzeichnisse rekursiv umzubenennen.
Also die Datei runterladen, mit Rootrechten in den PATH schieben und ausführbar machen (mv recrename.pl /usr/local/bin/recrename && chmod 755 /usr/local/bin/recrename) und dann kann's auch schon losgehen.
Als kleines Beispiel soll hier Entfernen von Leerzeichen sowie das Ändern von Groß- in Kleinbuchstaben in Dateinamen dienen (Annahme: die Dateien, die wir umbenennen wollen, liegen in /home/user/documents/):
code:
1:
recrename -rn 's#\s+#_#g;y#A-Z#a-z#' /home/user/documents

In meinen Augen ziemlich kurz Petzauge - und für den ein oder anderen auf den ersten Blick evtl. auch etwas kryptisch, darum hier eine kurze Erklärung. Der Switch -n sorgt zunächst einmal dafür, dass der obige Befehl nichts verändert, sondern nur anzeigt was das Script verändern würde, wenn man es ohne diese Option ausführt. -r teilt dem Programm mit, dass alle Dateien und Ordner, die sich unterhalb von /home/user/documents nach dem Schema umbenannt werden sollen. Zu guter Letzt ein kurzes Wort zu den regular expressions:
s#\s+#_#g; bedeutet hier folgendes: Ersetze jede Sequenz von 1 bis n aufeinanderfolgenden Whitespace-Zeichen durch einen Unterstrich.
y#A-Z#a-z# ersetzt - wie man vermuten wird - alle Groß- durch Kleinbuchstaben.
Prinzipiell kann man hier noch viele weitere Operationen durchführen, aber das hier genannte sollte für den Anfang genügen. Wer mehr wissen will, kann sich hier, hier sowie an vielen anderen Stellen im Netz weiterführenden Infos holen.


__________________
Have you tried turning it off and on again?

/join #dedies-board.de
10.07.2009 23:19 Haui ist offline E-Mail an Haui senden Homepage von Haui Beiträge von Haui suchen Nehmen Sie Haui in Ihre Freundesliste auf Jabber Screennamen von Haui: haui45@jabber.ccc.de
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Dedies-Board » Linux » FAQs » Rekursives Umbenennen

Impressum|Boardregeln


secure-graphic.de
Board Blocks: 368.799 | Spy-/Malware: 5.599 | Bad Bot: 1.542 | Flooder: 281.746 | httpbl: 6.555
CT Security System 10.1.7 © 2006-2024 Security & GraphicArt

Ja, auch Dedies-Board verwendet Cookies. Hier erfahrt ihr alles zum Datenschutz
Verstanden;