Hallo zusammen,
Ich habe meine Festplatten der letzten 10 Jahre aufgeräumt und nun die Aufgabe, den ganzen Krempel mal ein wenig aufzuräumen.
Probleme:
- Anstelle von Leerzeichen wurde z.B. Punkte oder Unterstriche verwendet. Diese sollen wieder, wo es Sinn ergibt, in Leerzeichen umgewandelt werden. Gleichzeitig soll natürlich die Dateiendungen (.txt) erhalten bleiben.
- Machmal gibt es Zusätze wie <Leerzeichen>(2009), dies soll dann in <Leerzeichen><Bindestrich><Leerzeichen>2009 umgewandelt werden.
Hat jemand eine Idee, wie ich das anstellen kann? Optik ist mir dabei egal, es muss nur funktionieren.
Gruß,
Karl
Dateinamen bereinigen
Re: Dateinamen bereinigen
Der Double-Commander hat ein tolles Feature zur Gruppen-Umbenennung von Dateien in einem Verzeichnis, mit gleichzeitigen Ersetzen, Nummerieren, Anfügen, Entfernen... ich nutze das gerne und häufig.
In Stretch ist die aktuelle Version 0.7.7 enthalten, in Jessie weiss ich grad nicht. Wenn sie in Jessie zu alt wäre, würde ich lieber die Version von der Projektseite installieren. Und ich würde von der GTK-Variante abraten, die hat durchgängig Probleme bei mir verursacht.
In Stretch ist die aktuelle Version 0.7.7 enthalten, in Jessie weiss ich grad nicht. Wenn sie in Jessie zu alt wäre, würde ich lieber die Version von der Projektseite installieren. Und ich würde von der GTK-Variante abraten, die hat durchgängig Probleme bei mir verursacht.
apt show doublecmd-qt
-
- Beiträge: 507
- Registriert: 30.12.2016 23:48:51
Re: Dateinamen bereinigen
Es soll also nur dort in Leerzeichen umgewandelt werden, wo es Sinn ergibt. Woher weiß ein Programm denn, was für dich optisch Sinn ergibt je nach Datei?
Das klingt schon nach erheblichem Aufwand, wo man mit etwas Einheitlichem evtl. besser beraten wäre. Und man muss einem Programm letztlich auch exakte Parameter vorgeben, wonach es agieren soll. Würde dir auch anraten, Leerzeichen in Datei -oder Ordnernamen nicht zu erhalten, besser noch sie zu meiden. Sie sorgen nur nachhaltig für Probleme. Es ist zwar möglich, aber bedeutet eben unnötige Mehrarbeit.
Die folgende Kommandozeile, würde bspw. aus allen Datei -und Ordnernamen, jeweils die Leerzeichen durch Bindestriche ersetzen, wie auch jedwede Zeichen löschen die dem erlaubten Muster nicht entsprechen.
Bei rename ist der Parameter -n definiert, wodurch Änderungen nur auf dem Terminal ausgegeben werden. Sollen die Daten real editiert werden, so muss der Parameter entfernt werden.
Sinnvoll wäre auch mal betreffende Dateinamen im Original zu sehen. Besonders jene die unterschiedlich gehandhabt werden sollen.
Das klingt schon nach erheblichem Aufwand, wo man mit etwas Einheitlichem evtl. besser beraten wäre. Und man muss einem Programm letztlich auch exakte Parameter vorgeben, wonach es agieren soll. Würde dir auch anraten, Leerzeichen in Datei -oder Ordnernamen nicht zu erhalten, besser noch sie zu meiden. Sie sorgen nur nachhaltig für Probleme. Es ist zwar möglich, aber bedeutet eben unnötige Mehrarbeit.
Die folgende Kommandozeile, würde bspw. aus allen Datei -und Ordnernamen, jeweils die Leerzeichen durch Bindestriche ersetzen, wie auch jedwede Zeichen löschen die dem erlaubten Muster nicht entsprechen.
Code: Alles auswählen
find Pfad_zum_Ordner | rename -n "s/[[:space:]]/-/g;s/[^.a-zA-Z0-9-\/]//g"
Sinnvoll wäre auch mal betreffende Dateinamen im Original zu sehen. Besonders jene die unterschiedlich gehandhabt werden sollen.
Re: Dateinamen bereinigen
Rename ist eigentlich nur ohne Verzeichnisstruktur zu gebrauchen. Wenn z.B. sowas von find kommt "/home/da tei1/da tei2.txt", dann wird rename scheitern, da er die Datei nicht findet, weil das Verzeichnis (nach der Verzeichnisänderung) nicht vorhanden ist. Und zwar egal wie man's dreht - ob mit einem find | tac | rename oder mit einem vorhergehenden ändern von "/home/da tei1". Entweder man bastelt sich da was mit rename zusammen oder man lässt die find-Zeile so oft laufen, bis kein Fehler mehr kommt!?breakthewall hat geschrieben:Die folgende Kommandozeile, würde bspw. aus allen Datei -und Ordnernamen, jeweils die Leerzeichen durch Bindestriche ersetzen, wie auch jedwede Zeichen löschen die dem erlaubten Muster nicht entsprechen.
Code: Alles auswählen
find Pfad_zum_Ordner | rename -n "s/[[:space:]]/-/g;s/[^.a-zA-Z0-9-\/]//g"
-
- Beiträge: 507
- Registriert: 30.12.2016 23:48:51
Re: Dateinamen bereinigen
Eigentlich ist rename für solch komplexe Aufgaben, alleine gar nicht zu gebrauchen. Besonders ist rename nicht fähig rekursiv zu arbeiten, was eine Ausführung für jedes einzelne Verzeichnis erfordern würde. selbst via Schleife ausgeführt, ist Rekursivität ohne zusätzliche Shell-Optionen nicht drin. Auch kann kein Programm wissen, wie für ihn eine sinnvoll individuelle Umbenennung pro Datei aussieht. Sicher kann man gewisse rudimentäre Kommandozeilen erstellen, aber ab hier wird es nur noch exponentiell schwieriger alles mit einzubeziehen. Daher würde die angegebene Kommandozeile mehrfach ausgeführt, zunächst alle Dateien und Ordner auf ein sauberes und kompatibles Level bringen, worauf man letztlich aufbauen kann. Sicher ist die Kommandozeile nicht perfekt, und dennoch funktioniert sie sehr gut zum Bereinigen, auch wenn es für so eine Aufgabe keine perfekte Lösung gibt. So oder so wird man selbst Hand anlegen müssen, wenn alle Dateien nach individuellem Schema umbenannt werden.tobo hat geschrieben:Rename ist eigentlich nur ohne Verzeichnisstruktur zu gebrauchen. Wenn z.B. sowas von find kommt "/home/da tei1/da tei2.txt", dann wird rename scheitern, da er die Datei nicht findet, weil das Verzeichnis (nach der Verzeichnisänderung) nicht vorhanden ist. Und zwar egal wie man's dreht - ob mit einem find | tac | rename oder mit einem vorhergehenden ändern von "/home/da tei1". Entweder man bastelt sich da was mit rename zusammen oder man lässt die find-Zeile so oft laufen, bis kein Fehler mehr kommt!?
Re: Dateinamen bereinigen
tobo hat geschrieben:Und zwar egal wie man's dreht - ob mit einem find | tac | rename oder mit einem vorhergehenden ändern von "/home/da tei1". Entweder man bastelt sich da was mit rename zusammen oder man lässt die find-Zeile so oft laufen, bis kein Fehler mehr kommt!?
Code: Alles auswählen
find -depth
rot: Moderator wanne spricht, default: User wanne spricht.
Re: Dateinamen bereinigen
-depth entspricht leider nur dem oben erwähnten einfügen von tac in der pipe. Würde also nichts bringen, da rename das nicht auflösen kann. Aber selbst wenn rename das rekursiv (an einer Datei) lösen könnte, dann wäre die Lösung in Kombination mit find (in einem Lauf) nicht umzusetzen, da die nachfolgenden find-Funde dann ja keinen existierenden Pfad mehr hätten. Trotzdem danke, -depth war mir (ersichtlich an dem tac) nicht bekannt - ist allerdings auch nicht mein Thread!?