Skript bzw. Befehl zum Ersetzen von Zeichen in Dateinamen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Skript bzw. Befehl zum Ersetzen von Zeichen in Dateinamen

Beitrag von Che » 06.07.2010 11:26:33

Hallo Forum,

es ist mir schon mehrfach vorgekommen, dass ich ein bestimmtes Zeichen (Leerzeichen, ä, ö, _, -, ü usw.) in z.B. allen Dateiebezeichnungen eines Verzeichnis durch ein anderes ersetzen wollte. Alles manuell vorzunehmen, wie ich es bisher mache, ist sehr aufwändig und irgendwie unklug, wenn man weiß, dass unter GNU/Linux das ganze durch die Ausführung eines entsprechendes Skript bzw. Befehl gemacht werden kann.

Doch um ein solches Skript oder Kommando schreiben zu können bin ich nicht in der Lage. Da es hier im Forum so viele Experten in diesem Bereich gibt, kann mir - und vermutlich vielen weiteren Benutzern - helfen kann.

Ich stelle ein hypothetisches Beispiel auf, damit mein Bedarf verständlicher wird.

Nehmen wir an, dass ich in meinem Homeverzeichnis einen Ordner 'Texte' habe, in dem eine Reihe von Dateien liegen, bei denen das Zeichen 'ä' durch 'ae' ersetzt werden sollen:

Code: Alles auswählen

che@debian:~$  ls  /home/che/Texte
zähler_dörfer.pdf
Cäser.tex
schöne Ausländerin.png
Katzen_Hunde.py
Bär im Zoo.png
Schätze der Erde.txt
Dazu folgende Fragen:
1) Wie kann ich per Skript bzw. Kommando alle 'ä' der Dateibezeichnungen durch 'ae' ersetzen?
2) Und wenn ich dazu gleichzeitig noch weitere Zeichen wie 'ö' ersetzen wollte?
3) Und wenn ich entsprechende Befehle/Skripten auf Dateien anwenden wollte, die sich in verschiedenen Verzeichnissen befinden?

Für die Hilfe bedanke ich mich ganz herzlich im Voraus!

Viele Grüße
che

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von roli » 06.07.2010 12:18:01

Hi,

was mir dazu spontan einfaellt ist "mmv" (multiple move). Aus der Erinnerung heraus (ergo ungetestet) kannst du da sachen machen wie:

Code: Alles auswählen

mmv *ä* $1ae$2
Wenn du das mit allen vorkommenden Zeichen in ein Script packst, solle es das machen was du willst.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Meillo » 06.07.2010 13:56:04

rename(1), das mit Perl kommt, kann das ebenfalls:

Code: Alles auswählen

rename 's/ä/ae/g' *
Use ed once in a while!

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 07.07.2010 11:39:32

Danke für die Hilfreiche Beiträge!

Zitat von Roli:
was mir dazu spontan einfaellt ist "mmv" (multiple move). Aus der Erinnerung heraus (ergo ungetestet) kannst du da sachen machen wie:
mmv *ä* $1ae$2
Das müsste man wohl etwas anderes scheiben, denn wie es da steht, verschwinden die Dateien (Du meintest 'mv' anstelle von 'mmv', richtig?)!

Zitat von Meillo:
rename(1), das mit Perl kommt, kann das ebenfalls:
rename 's/ä/ae/g' *
Damit kann ich tatsächlich die Dateien im lokalem Verzeichnis wie gewünscht ändern. Toll!

Wie kann ich dieses Kommando auf Dateien anwenden, die nicht im lokalen Verzeichnis liegen und rekursiv auf die Unterverzeichnisse?

Viele Grüße
che

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Meillo » 07.07.2010 11:50:04

Che hat geschrieben: Zitat von Roli:
was mir dazu spontan einfaellt ist "mmv" (multiple move). Aus der Erinnerung heraus (ergo ungetestet) kannst du da sachen machen wie:
mmv *ä* $1ae$2
Das müsste man wohl etwas anderes scheiben, denn wie es da steht, verschwinden die Dateien (Du meintest 'mv' anstelle von 'mmv', richtig?)!
Nein, das Kommandos heißt `mmv' (multiple mv). Schau dir einfach die Beispiele in der Manpage von mmv(1) an.
Zitat von Meillo:
rename(1), das mit Perl kommt, kann das ebenfalls:
rename 's/ä/ae/g' *
Damit kann ich tatsächlich die Dateien im lokalem Verzeichnis wie gewünscht ändern. Toll!

Wie kann ich dieses Kommando auf Dateien anwenden, die nicht im lokalen Verzeichnis liegen

Code: Alles auswählen

rename 's/ä/ae/g' /path/to/some/dir/*.txt
und rekursiv auf die Unterverzeichnisse?

Code: Alles auswählen

find /path/to/dir | xargs rename 's/ä/ae/g'
Use ed once in a while!

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von roli » 07.07.2010 11:56:48

Che hat geschrieben:Das müsste man wohl etwas anderes scheiben, denn wie es da steht, verschwinden die Dateien (Du meintest 'mv' anstelle von 'mmv', richtig?)!
Nein, ich meine schon mmv => Multiple Move!
Ob sie verschwinden oder nicht kann ich jetzt und hier nicht testen, da ich wie schon gestern an einem Rechner mit dem anderen OS sitze, und auch da schon "Aus der Erinnerung heraus (ergo ungetestet)" geschrieben habe ;-}
Aber schließlich gibt's Manuals und die Suchmaschine deines/meines/unseres Vertrauens, da kommt u.a.:
An example of how to use mmv is shown below:

mmv \*.JPG \#1.jpg

The first pattern matches anything with a ".JPG" and renames each file (the "#1" matches the first wildcard) to ".jpg".

Each time you use a \(wildcard) you can use a #x to get that wildcard. Where x is a positive number starting at 1.
Quelle: http://www.linuxtopia.org/online_books/ ... ename.html
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 07.07.2010 19:35:14

Vielen Dank für die tolle Vervollständigung der Lösung! Was für Zeit diesen gesegneten Befehle mir sparen werden!

Zitat von Roli:
Che hat geschrieben:
Das müsste man wohl etwas anderes scheiben, denn wie es da steht, verschwinden die Dateien (Du meintest 'mv' anstelle von 'mmv', richtig?)!

Nein, ich meine schon mmv => Multiple Move!
Ob sie verschwinden oder nicht kann ich jetzt und hier nicht testen, da ich wie schon gestern an einem Rechner mit dem anderen OS sitze
Ach so! Ich ging von einem Tippfehler aus, weil sowohl auf meinem Lenny-System als auch auf dem Squeezy (beide amd64) 'mmv' nicht bekannt ist. Deshalb kann es auch keine Manpage dazu geben:

Code: Alles auswählen

che@debian:~/b$ man mmv
No manual entry for mmv
Bei der Debian_sid-Version ist es noch vorhanden (und hört sich toll an!):
http://packages.debian.org/unstable/utils/mmv

Mit renave, wie Meillo es gelöst hat, klappt es jedoch wunderbar!

Nochmal vielen Dank an allen!

Viele Grüße
che

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 11.07.2010 01:30:44

Hallo,
ich muss doch nochmal auf Euch zurückkommen. Obwohl bei meinem Minimaltest die Befehle von Euch gut geklappt haben, konnte ich die übrigen Dateimengen (deren Bezeichnungen) nicht bearbeiten.

In den erwähnten Dateinamen kommen unheimlich viele uninteressante Zeichen vor, wie man aus folgender Ausgabe entnehmen kann:

Code: Alles auswählen

che@debian:~/Texte/Sprachtheorie$ ls
Ammon,+U.+1995)+Die+deutsche+Sprache+in+Deutschland,+oesterreich+und+der+Schweiz.+Berlin,+New+York.+de+Gruyter.+Kap.+A.+Theoretische+und+methodische+Vorueberlegungen..pdf
Ammon,+U.+Die+Folgen+der+&+EU-Erweiterung+fuer+die+deutsche+Sprache.+In+Sociolinguistica+(2007).+Sprachliche+Folgen+der+EU-Erweiterung+(Bd.21).pdf
Ammon,+U..Sprache-Nation.+Die+Plurinationalit?t+des+Deutschen.+In+Gardt,+A.+(Hrsg.)+(2000)+Nation+und+Sprache.+Berlin,+New+York.+de+Gruyter.+S.+509-524..pdf
Barbour,+S.;+Stephenson,+P.+(1998)+Variation+im+Deutschen.+Soziolinguistische+Perspektiven.+Berlin,New+York.+de+Gruyter.+Kap.+6-9..pdf
Blommaert,+J..+Linguistic+Diversity.+Africa.+In+Hellinger,+M.;+Pauwels,+A.+(Hrsg.)+(2007)+Handbook+of+Language+and+Communication.+Diversity+and+Change.+S.+123-49..pdf
Busse,+U.+(2008)+Anglizismen+im+Deutschen.+In+Moraldo,+S.M.+Sprachkontakt+und+Mehrsprachigkeit.+S.37-69).pdf
clyne.pdf
Elter,+I.+In+2007.+Textsorten-+und+varietaetenspezifisches+Vorkommen+eines+syntaktischen+Anglizismus.+In+Moraldo,+S.M.+(2008)+Sprachkontakt+und+Mehrsprachigkeit.+(S.95-107).pdf
Wenn ich dann z.B. den Befehl

Code: Alles auswählen

 find  /Texte/Sprachtheorie | xargs rename 's/\+/ /g' 
ausführe, kommt die Ausgabe:

Code: Alles auswählen

xargs: unmatched einfache quote; by default quotes are special to xargs unless you use the -0 option
Can't rename  exte/Sprachtheorie/1+Sprachpolitik+Einfuehrung+.doc 09/Materialien_und_Termine/1 Sprachpolitik Einfuehrung .doc:: Datei oder Verzeichnis nicht gefunden
...
Woran liegt genau das Problem? Wenn ich durch Nautilus Dateien kopiere, die bestimmte Zeichen haben (z.B. '?'), dann wird eine Meldung ausgegeben und diese Dateien werden nicht kopiert. So gehe ich davon aus, dass auch beim oberen Befehl bestimmte Zeichen die gesamte Umbenennung blockieren. Kann mir bitte jemand diesen Zusammenhang beschreiben?

Wie gehe ich am besten vor, um diese 'fremden' Zeichen los zu werden?

Viele Grüße
che

Benutzeravatar
detix
Beiträge: 1699
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von detix » 11.07.2010 07:56:19

Eine oder mehrere der Dateien hat Einzelticks im Dateinamen?
Dann so:

Code: Alles auswählen

find ~/Texte/Sprachtheorie -type f -print0 | xargs -0 rename 's/\+/ /g'
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 11.07.2010 11:04:13

Vielen Dank, Detix! Mit Deiner Erweiterung bin ich viel weiter gekommen. Welche Zeichen gehören zu den ''Einzelticks'?

Wenn ich versuche die zeichen '..' (zwei Punkte), ',' (Komma), '-' (Bindestrich) und '_' zu ersetzen:

Code: Alles auswählen

find ~/Texte/Sprachtheorie -type f -print0 | xargs -0 rename 's/\,/ /g'
wird weiterhin die oben erwähnte Ausgabe gegeben, ohne das Vorhaben umzusetzen.

Warum ist das so und wie kann es umgangen werden?

Viele Grüße
che

Benutzeravatar
Jerry
Beiträge: 665
Registriert: 01.09.2006 08:36:45
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /home

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Jerry » 11.07.2010 12:45:29

Hallo,
Ein hübsches Script für diesen Zweck hab ich auf simplescripts.net gefunden. Es nennt sich Filenamesanitizer http://www.simplescripts.net/?p=21

Gruß
Wolf
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 12.07.2010 19:48:10

Vielen Dank für den Hinweis auf das skript, Jerry! Nur ... wie kann man es eigentlich anwenden? Da habe ich überhaupt wenig Ahnung!

Viele Grüße
che

Benutzeravatar
mR. bluE
Beiträge: 182
Registriert: 01.07.2006 15:33:56

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von mR. bluE » 14.07.2010 18:38:25

SED sollte das tool deiner Wahl sein, hier den Link zu dem sehr guten Buch Linux das umfassende Handbuch lies dir am besten das komplette Kapitel Shellscript Programmierung durch.

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 19.01.2015 14:50:18

Hallo,
es ist schon ziemlich viel Zeit vergangen, ohne dass ich mich mit sed auseinanadersetzen konnte. Mit find und grep, wie oben vorgeschlagen, konnte ich das Wesentlich zufriedenstellend lösen. Jetzt ist mir ein neuer Fall aufgetaucht, der mich staunen lässt. Es liegen Dateilisten vor, deren Bezeichnung mit Zeichenfolgen wie:

Code: Alles auswählen

formatiert.txtusw.txt
KommaTrennt.txtusw.txt
platzhalter.pdfusw.pdf
txtusw.txt
beginnen. Möchte ich die ersten Zeichen der Bezeichnung (was vor 'usw' steht) durch andere Zeichen wie 'b' mit dem Befehl:

Code: Alles auswählen

 find  /Texte/Sprachtheorie | xargs rename 's/\txt/b/g' 
ersetzen, tut sich gar nichts. Wie kann dies erklärt werden? Wird der Befehl für Zeichenfolgen in anderen (mittleren) Bereichen der Bezeichnung angewendet, funktioniert es ohne Probleme.

Ich bedanke mich im Voraus für Lösungstipps!

Viele Grüße
che

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von newdeb » 19.01.2015 16:24:44

Code: Alles auswählen

rename 's/\txt/b/g' 
Ersetzt die Zeichenfolgen "Tab" (\t) + "xt" durch "b".

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 03.02.2015 13:54:31

Danke, Newdeb!

Noch zwei Fragen:

1. Gibt es eine Möglichkeit, das erste Zeichen einer Dateibezeichnung spezifisch anzusprechen, zum Beispiel wenn man am Anfang der Bezeichnung andere Zeichen hinzufügen möchte?

2. kann der Befehl rekursiv auf Unterverzeichnisse angewedet werden? Wenn ja, wie soll der Befehl genau aussehen?

Herzlichen Dank
che

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von newdeb » 03.02.2015 18:47:49

Den Wort-/Namensanfang kannst du mit dem Zeichen '^' ansprechen, einen sogenannten Anker (eine gedachte, nicht druckbare Positionsreferenz in einem regulären Ausdruck).

Code: Alles auswählen

$ touch foo
$ rename -n 's/^/my/' foo
foo renamed as myfoo
Du kannst auch '^' mit nachfolgenden (Meta-)Zeichen kombinieren, um z.B. das erste Zeichen zu ersetzen ('.' -> beliebiges Zeichen im regulären Ausdruck)

Code: Alles auswählen

$ touch bar
$ rename -n 's/^./my.t/' bar
bar renamed as my.tar
Zuletzt geändert von Meillo am 03.02.2015 22:20:25, insgesamt 1-mal geändert.
Grund: s/°/^/

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 04.02.2015 03:57:06

Danke, Newdeb! Das ist genau was ich brauchte! Für die Frage 2 habe ich auf diese Seite interessante Beispiele gefunden, habe sie aber noch nicht ausprobiert:
http://forum.ubuntuusers.de/topic/verze ... nd-rename/
Viele Grüße
che

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von newdeb » 04.02.2015 10:52:20

Che hat geschrieben:Für die Frage 2 habe ich auf diese Seite interessante Beispiele gefunden,
Ich würde die Antwort in diesem (deinem) Thread nehmen, die ist jüngeren Datums :wink:
Meillo hat geschrieben:

Code: Alles auswählen

find /path/to/dir | xargs rename 's/ä/ae/g'

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 04.02.2015 15:29:38

Danke für den Hinweis! Wende ich den Befehl an, bekomme ich die Meldung:

Code: Alles auswählen

find /path/to/dir | xargs rename 's/ä/ae/g'
xargs: unmatched einfache quote; by default quotes are special to xargs unless you use the -0 option
Mit diesem Befehl war es möglich, durch die zahlreichen Unterverzeichnisse durch zu kommen, ohne auf unerwarteten Zeichen hängen zu bleiben:

Code: Alles auswählen

 find ./ -execdir rename 's/ä/ae/;s/ü/ue/;s/ö/oe/'  -v {} \;
Was in diesem Unterverzeichnis liegt:

Code: Alles auswählen

patricia_shaw/Patrici_Shaw_Gelese_von_Philipp_Schepmann-1/Im_Tal der Mangobaume
01 - Titelnummer 1.ogg
02 - Titelnummer 2.ogg
wird mit diesem Befehl:

Code: Alles auswählen

find ./ -execdir rename 's/_-_ /_/;s/ä/ae/;s/ö/oe/;s/ü/ue/;s/Ä/ae/;s/, /_/;s/\._/_/;s/_-_/_/;s/ - /_/;s/ /_/' -v {} \;
jedoch nicht entsprechend geändert. Ausgegeben wird die Meldung "Datei oder Verzeichnis nicht gefunden". Leerzeichen im Verzeichnisname dürfen anscheinend nicht vorkommen.
Warum es problematisch ist, wenn im Pfad Großbuchstaben vorkommen (es wird im oben geposteten Link angesprochen) habe ich nicht verstanden. Mit dem relativen Pfad ./ gibt es derartige Probleme nicht. Auf der erwähnten Seite wird diesen zusammengestellten Befehl angegeben:

Code: Alles auswählen

 find ./ -execdir rename 's/ä/ae/;s/ü/ue/;s/ö/oe/'  -v {} \;
Wie kann ich das Ende einer Datei-Bezeichnung ansprechen? Gibt es eine Möglichkeit, nur Verzeichnisse bzw. nur Dateien (in den Unterverzeichnissen) anzusprechen? Zu einigen dieser Fragen habe ich hier unter Einsatz des Programms convmv was finden können: https://www.sebastian-siebert.de/2009/1 ... mbenennen/

Um Unterverzeichnisse umzubenennen (z.B. um die Leerzeichen durch anderes Zeichen zu ersetzen, um somit die dort enthaltenen Dateien umbenennen zu können), habe ich erfolgreich folgenden Befehl benutzt:

Code: Alles auswählen

find ./ -depth -type d -print0 | xargs -r -0 rename 's/\ /_/g'
Für jede Verzeichnisebene muss der Befehl anscheinend erneut ausgeführt werden, er wirkt Schrittweise immer eine Ebene tiefer. Erst danach kann der Befehl um die enthaltenen Dateinamen zu ändern ausgeführt (eventuell auch mehrfach) werden.

Folgende Erläuterungen fand ich hilfreich:
Erläuterung für find:
./ = In welchem Verzeichnis soll durchsucht werden (hier nur aktuelles)
-type f = Nur Dateien sollen berücksichtigt werden
-print0 = Jede Datei wird ein NULL-Zeichen als Trennzeichen angehängt, somit lassen sich die Dateiennamen bei der Übergabe an xargs besser auseinander halten

Erläuterung für xargs:
-r = nicht ausführen, wenn keine weiteren Argumente übergeben werden können (= leer)
-0 = NULL-Zeichen als Trennzeichen berücksichtigen.

Vielen Dank
che

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 01.09.2016 11:34:03

Hallo Debianer,
wie könnte ich den Ersetzungsbefehl so gestallten, dass alles, was kein Groß- oder Kleinbuchstabe ist und was keine Zahl ist durch "_" ersetzt wird?

Heute wollte ich eine BRD-ISO erstellen und K3B gab die meldung aus:

"/usr/bin/genisoimage: No such file or directory. Invalid node - '/pfad/Datei' "

Dabei habe ich festgestellt, dass ein komisches Viereckzeichen in der angegebenen Dateiname enthalten ist. Dieses Zeichen wird nur sichtbar, wenn man z.B. unter Nautilus das Umbebenne derselben aktiviert hat. Es handelt sich um eine aus dem Internet heruntergeladene Datei.

Das so viele unerwarteten für das Programm unersträglichen Zeichen vorkommen können, wäre es vermutlich einfacher, ein Befehl zu schreiben, der nur die Zeichen angibt, de erlaubt sind, und alles davon abweichende in "_" umwandelt. Geht das? Wie würde sowas aussehen?
Vielen Dank!
che

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von newdeb » 01.09.2016 13:27:43

Code: Alles auswählen

rename 's/[^[:alnum:].]/_/g' datei ...
Der Punkt '.' ist hier ausgespart, um die Extension zu erhalten.

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 02.09.2016 14:51:33

Danke! Wenn ich jedoch diesen Befehl so ausführe:

Code: Alles auswählen

rename 's/[^[:alnum:].]/_/g' /media/che/Home-wheezy-sda3/che/Dokumente/*
Bekomme ich als Ausgabe eine Reihe von Meldungen wie diese:

Code: Alles auswählen

Can't rename /media/che/Home-wheezy-sda3/che/Dokumente/Unternehmen.odt _media_che_Home_wheezy_sda3_che_Dokumente_Unternehmen.odt: Ungültiger Link über Gerätegrenzen hinweg
Viele Grüße
che

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Meillo » 02.09.2016 15:26:03

Che hat geschrieben:

Code: Alles auswählen

rename

Code: Alles auswählen

Ungültiger Link über Gerätegrenzen hinweg
Tja, da haette man in der Implementierung statt rename(2) wohl besser mv(1) verwendet (bzw. dessen Vorgehen implementiert) ...
Use ed once in a while!

Che
Beiträge: 358
Registriert: 09.06.2006 19:00:33

Re: Skript bzw. Befehl zum Ersetzen von Zeichen in Dateiname

Beitrag von Che » 02.09.2016 23:11:30

Was hat das zu bedeuten? Wieso "über Gerätegrenzen hinweg", wenn im angegebenen Pfad eine normal heruntergeladene Webseite liegt? Sind vielleicht die darin befindlichen Verlinkungen gemeint?

Code: Alles auswählen

Tja, da haette man in der Implementierung statt rename(2) wohl besser mv(1) verwendet (bzw. dessen Vorgehen implementiert)
Entschuldigung, aber ich verstehe nicht wirklich, was du sagen willst.

Als ich weiter oben meinte, dass ein Befehl zur Umbenennung von Dateien und Verzeichnisse, der alle Buchstaben und alle Zahlen beibehalten würde und alles andere durch "_" ersetzt, habe ich auch Buchstaben mit Umlauten oder andere Diakritica als Buchstabe berechnet. Bei dem obigen Befehl scheinen Umlaute aber anders aufgafasst zu werden, denn "Einkäufe" wird zu "Eink__ufe". Wie kann das Berücksichtigt werden?

Viele Grüße
che

Antworten