it-artikel:linux:massenhaft-dateinamen-bereinigen-bzw-umbenennen-auf-der-kommandozeile-mit-rename-und-regex

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.

Für Windows User habe ich früher schon mal eine ähnliche Anleitung geschrieben zur Verwendung mit Powershell.

Viele Grüße

Axel Werner 2016-12-04 15:03

it-artikel/linux/massenhaft-dateinamen-bereinigen-bzw-umbenennen-auf-der-kommandozeile-mit-rename-und-regex.txt · Last modified: 2022-08-31 12:30 by 127.0.0.1