Hallo
ich habe ein interessantes Problem, bei dem ich dachte "das geht mit Linux leicht" und doch finde ich keine passende Lösung.
Habe mehrere Dateien die eine Klammer im Dateinamen habe, und das über verschiedene Unterverzeichnisse verteilt.
Beispiel:
/home/Bilder/Sommer(1).jpg
/home/Bilder/Sommer(2).jpg
/home/Bilder/Urlaub/Strand(1).jpg
und so weiter....
Jetzt möchte ich gern alle Dateien inklusive denen in Unterverzeichnissen von der Klammer befreien und die durch ein "-" ersetzten.
so das sie dann heisst:
/home/Bilder/Sommer-1-.jpg
Es gibt wohl das Paket "rename" zum Umbenennen von Dateien mit regulären Ausdrücken allerdings beachtet es wohl keine Unterverzeichnisse.
Hat jemand eine Idee oder vielleicht ein Script das dieses Problem löst?
Buchstaben im Dateiname ändern
Re: Buchstaben im Dateiname ändern
Ja, rename arbeitet nicht rekursiv. Eine einfache Lösung ist daher z.B. find vorzuschalten:
Wenn das so stimmt, dann den Simulationsschalter von rename (-n) entfernen.
Code: Alles auswählen
find . -type f -name '*(*)*' -exec rename -n 's/\(/-/g;s/\)/-/g' {} +
Re: Buchstaben im Dateiname ändern
Perfekt, es funktioniert. Vielen Dank!
Re: Buchstaben im Dateiname ändern
Mein Vorschlag für das Regex-Pattern hätte so ausgesehen:
Code: Alles auswählen
's#\((\d+)\)#-$1-#g'
Mir geht es hier eher um den allgemeinen Hinweis, dass man mit der Formulierung von Aufgabe und Lösung sehr präzise sein sollte, wenn die Lösung eine Regex-Ersetzung ist.
Am konkreten Beispiel:
Die Lösung von tobo passt perfekt auf diese formulierte Aufgabenstellung. Meine nicht.gnude hat geschrieben:14.09.2021 09:30:32Habe mehrere Dateien die eine Klammer im Dateinamen habe,
[..]
Jetzt möchte ich gern alle Dateien [..] von der Klammer befreien und die durch ein "-" ersetzten.
Allerdings lassen mich die Beispiele vermuten, dass die Aufgabenstellung eigentlich eine andere ist:
In Prosa:gnude hat geschrieben:14.09.2021 09:30:32Beispiel:
/home/Bilder/Sommer(1).jpg
/home/Bilder/Sommer(2).jpg
/home/Bilder/Urlaub/Strand(1).jpg
Ich finde, darauf passt meine Lösung besser, denn sie berücksichtigt, dass die Klammern paarweise vorkommen und eine Zahl umschließen. Wie gesagt, im konkreten Beispiel ist das vermutlich egal, aber um mal ein (hoffentlich etwas abwegiges) Beispiel zu bringen, wo der Unterschied wichtig wäre:Ich habe mehrere Dateien die eine Zahl, umschlossen von Klammern, im Dateinamen haben.
Jetzt möchte ich in allen Dateien diese umschließenden Klammern durch "-" ersetzen.
Code: Alles auswählen
$ touch 'Hallo Schatz :).txt'
$ ls *.txt
'Hallo Schatz :).txt'
Code: Alles auswählen
$ rename -n 's/\(/-/g;s/\)/-/g' *
rename(Hallo Schatz :).txt, Hallo Schatz :-.txt)
Re: Buchstaben im Dateiname ändern
Ja, es kommt darauf an, was man haben will und aus welchem Grund. Sollen einfach alle runden Klammern aus den Dateinamen entfernt werden, oder will man das Muster Klammer-Zahl-Klammer umbauen. Meist ist dabei hilfreich zu wissen, *warum* man die Aenderung machen will, weil das Rueckschluesse darauf erlaubt wie die Umsetzung sein sollte.
Anyways, wenn ich einfach eine gewisse Menge an Zeichen entfernen oder mit einem Zeichen ersetzen wollen wuerde, dann wuerde ich es mit einer Zeichenklasse machen:
Fuer das Klammermuster finde ich hikarus Vorschlag optimal.
Anyways, wenn ich einfach eine gewisse Menge an Zeichen entfernen oder mit einem Zeichen ersetzen wollen wuerde, dann wuerde ich es mit einer Zeichenklasse machen:
Code: Alles auswählen
's/[()]/-/g'
Use ed once in a while!