Massenhaft Dateinamen bereinigen bzw umbenennen auf der Kommandozeile mit rename und regex
Wer kennt das nicht, wenn man eine gewisse Zeit alle möglichen Dateien von verschiedenen Quellen in einem Verzeichnis sammelt, so sehen die Dateinamen alle oft unterschiedlich aus und enthalten zudem alle möglichen Sonderzeichen bzw Trennzeichen. z.B. sowas…
a.b.c.d.xxx double--char--test.xxx E_F_G_H.xx4 i-j-k-l.xxxx m_n-o.p.xx3 q r s - t_u-v.xxxxx
Also mich stört das manchmal. Daher suchte ich nach einem schnellen und einfachen Weg um die ganzen Dateinamen erst mal “grob” von dem ganzen Schmutz zu säubern und ein halbwegs einheitliches Bild zu erhalten.
Mein erstes Ziel war, alle ungewollten Zeichen im Dateinamen gegen SPACES auszutauschen, wobei die Dateierweiterung (Extension) mit beliebig vielen Zeichen erhalten bleiben soll. Also alle “_”, “.” und “-”. Achtung multiple extensions wie tar.gz usw sind in meinem Beispiel ausgenommen/nicht erlaubt!!
Nach einiger Internet Recherche und grübeln bin ich dann auf das CLI Tool “rename” gestossen, welches mit regulären Ausdrücken gefüttert werden kann um massenhaft Dateien umzubenennen.
# Unerwünschte Zeichen stehen zwischen den eckigen Klammern # vvv rename 's/[-_.](?![a-zA-Z0-9]*$)/ /g' * ; ls -la # ^ # Gewünschtes Ersatz-Trennzeichen zwischen den beiden SLASHES (/)
Nach der erfolgreichen Ausführung sieht das Ergebnis wie folgt aus:
a b c d.xxx double char test.xxx E F G H.xx4 i j k l.xxxx m n o p.xx3 q r s t u v.xxxxx
Wenn man noch mehr Zeit investiert kann man natürlich das Ergebnis noch verbessern und z.b. doppelte Spaces entfernen. Aber das ist mit “rename” nun auch kein großes Problem mehr.
Tips und Verbesserungsvorschläge/Patches dürfen mir zur veröffentlichung gerne per Mail geschickt werden.
Viele Grüße
— Axel Werner 2016-12-04 15:03