Aus Linux-Magazin 09/2018

Tricks, die bei der Tipperei helfen

© Teerapat Seedafong, 123RF

Die klassische Systemadministration unter Linux oder Unix ist Tipparbeit. Entsprechend haben findige Köpfe besonders viele Tricks ersonnen, um die Fingergymnastik zu reduzieren.

Oft will sich der Admin eine Sicherheitskopie anlegen, bevor er eine Konfigurationsdatei editiert. Sollte sich später herausstellen, dass die Änderungen doch nicht das Gelbe vom Ei waren, kann er die zur Seite gelegte Version reaktivieren. Er muss also so etwas tun wie:

$ cp /home/jcb/test/original.conf /home/jcb/test/original.conf.bak

Um Pfad und Dateinamen nicht doppelt tippen zu müssen, haben die Schöpfer der Bash die so genannte Brace Expansion erfunden. Dabei wird ein Textteil mit einem zweiten kombiniert, der in geschweiften Klammern vor- oder nachgestellt wird:

$ echo {Ein,Zwei,Drei}teiler
Einteiler Zweiteiler Dreiteiler

Für die Sicherungskopie ist das auf diese Weise nutzbar:

$ cp /home/jcb/test/original.conf{,.bak}
$ ls /home/jcb/test/
original.conf  original.conf.bak

Nicht neu tippen muss ein Linuxer auch die Argumente von Befehlen, wenn er sie mehrfach braucht. Die Tastenfolge [Esc]+[.] wiederholt sie. Ein klassischer Anwendungsfall ist der Wechsel in ein zuvor kreiertes Verzeichnis:

$ mkdir /home/jcb/test/dir_1
$ cd [ESC]+[.]

Etwas Ähnliches, wenn auch etwas komplizierter, würde er mit folgender Befehlsfolge erreichen:

$ mkdir /home/jcb/test/dir_1/subdir_a
$ [Pfeil-nach-oben]
[Ctrl]+[A]
5 x [Pfeil-nach rechts]
[Ctrl]+[K]
5 x [Backspace]
$ cd [Ctrl]+[Y]

Die Pfeiltaste nach oben holt den eben ausgeführten Befehl aus der Historie zurück, [Ctrl]+[A] springt an den Zeilenanfang. Danach platziert der Benutzer den Cursor hinter dem »mkdir«, und [Ctrl]+[K] kopiert alles hinter dem Cursor in eine spezielle Zwischenablage. Dann ersetzt er das Mkdir-Kommando durch »cd« und holt mit [Ctrl]+[Y] die Zwischenablage zurück.

Unter anderem Namen

Ein weiterer häufiger Fall sind Dateinamen, die einem bestimmten Muster folgen. MP3-Files könnten etwa nach Titel – Titelnummer – Musiker – Album benannt sein. Was ist, wenn der Musikfan nun beschließt, seine Sammlung lieber nach Musiker – Album – Titelnummer – Titel zu ordnen?

Us and Them - 8 - Pink Floyd - Dark Side of the Moon.mp3

soll also werden zu:

Pink Floyd - Dark Side of the Moon  - 8 - Us and Them.mp3

Falls der Sammler mehr als ein Dutzend Alben besitzt, scheidet händisches Umbenennen aus. Aber das folgende kleine Skript leistet das Gewünschte:

for i in *; do
  mv "$i" "`echo $i | sed   "s/\(.*\) - \(.*\) - \(.*\) - \(.*\).mp3/  \3 - \4 - \2 - \1.mp3/"`";
done

Die Schleife liefert die Dateinamen im aktuellen Verzeichnis. Das »sed«-Kommando erkennt vier Gruppen beliebiger Zeichen, die durch Leerzeichen-Bindestrich-Leerzeichen getrennt sind. Dadurch, dass diese Musterteile geklammert sind, lassen sie sich im Ersetzungsteil unter ihrer laufenden Nummer wieder aufrufen. Die Klammern sind dabei jeweils durch einen Backslash zu maskieren. So gelingt es, beliebige Dateien effizient umzubenennen, deren Namen sich als reguläre Ausdrücke darstellen lassen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 1 HeftseitePreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
1 Kommentar
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Erik Braun
7 Jahre her

Ihre lange Kommandozeile für die Umbenennung mit regulären Ausdrücken kann natürlich als guter Ausgangspunkt für weitere Automatisierungen dienen. Soll es aber nur Aufgaben wie in dem Beispiel gehen, so ist das mit dem bei den üblichen Distributionen beiliegenden “prename” (es handelt sich um einen Teil der Perl-Distribution) deutlich kompakter und leserlicher gelöst:

prename ‘s/(.*) – (.*) – (.*) – (.*)\.mp3/$3 – $4 – $2 – $1.mp3/’ *.mp3

Nach oben