titel.png

Move, ärgere Dich nicht!

Zu Befehl: mv & mmv

01.10.2003
Mit mv ("move") steht Ihnen ein Standardkommando zur Verfügung, das schon seit Ewigkeiten auf Unix-Systemen dabei hilft, Dateien und Verzeichnisse zu verschieben oder umzubenennen. Leider wird es etwas komplizierter, wenn gleich mehrere Dinge in einem Rutsch durch die Gegend geschoben werden sollen. Mit längeren Konstruktionen und for-Schleifen lassen sich diese Aufgaben erledigen, aber warum kompliziert, wenn's auch einfach geht? Das Programm mmv ("multiple move") hilft dabei.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Das Kommando mv (englisch für "bewegen, verschieben") verschiebt und benennt Dateien und Verzeichnisse um. Sollen allerdings gleich mehrere Dateien angesprochen und beispielsweise mit einer neuen Endung versehen werden, helfen Bash-Wildcards nicht weiter. Mit for-Schleifen und basename lässt sich schon Einiges zaubern, aber einfacher geht es mit mmv.

Mach das Startfeld frei!

Mit mv können Sie Dateien umbenennen. Im aktuellen Verzeichnis lautet der einfache Aufruf:

huhn@huhnix:~> mv datei.html datei1.html

Das funktioniert auch verzeichnisübergreifend unter Angabe des absoluten oder relativen Pfads [1]. Der Aufruf

huhn@huhnix:~> mv /tmp/1.pdf datei.pdf

verschiebt die Datei 1.pdf aus dem Verzeichnis /tmp ins aktuelle Verzeichnis und benennt sie dabei in datei.pdf um. Das geht auch mit ganzen Verzeichnissen: mv /tmp/mp3s/ /home/huhn/ verschiebt das Verzeichnis mp3s ins eigene Home. Wer etwas mehr Sicherheit wünscht, setzt den Parameter -i (oder die lange Form --interactive) ein: Das Programm fragt dann nach einer Bestätigung, wenn im Zielverzeichnis bereits eine Datei mit gleichem Namen liegt:

huhn@huhnix:~> mv -i /tmp/1.pdf datei.pdf
mv: »datei.pdf« überschreiben?

Liegen in einem Verzeichnis mehrere Dateien mit der Endung .htm und sollen diese alle nach .html umbenannt werden, wird das mit mv etwas schwieriger:

huhn@huhnix:~> mv *.htm *.html
mv: Beim Verschieben mehrerer Dateien muss das letzte Argument ein Verzeichnis sein.
»mv --help« gibt weitere Informationen.

Die Bash löst die Wildcards auf und versucht, die einzelnen Dateien (datei1.htm, datei2.htm, …) in ein Verzeichnis zu verschieben, denn mv erwartet bei mehr als zwei Argumenten als letztes ein Verzeichnis. Nur für den Fall, dass ein Verzeichnis *.html existiert, hätte der Aufruf also Erfolg, und die .htm-Dateien würden dorthin verschoben; das wäre aber auch nicht das gewünschte Ergebnis. Eine for-Schleife in Kombination mit basename hilft hier weiter:

huhn@huhnix:~> for i in *.htm; do mv $i `basename $i .htm`.html; done

Jeder Dateiname mit der Endung .htm wird der Variablen i zugewiesen. Für sie wird dann mv aufgerufen, und zwar mit zwei Parametern: Der erste Parameter ist die Ausgangsdatei ($i), der zweite die Ausgabedatei, gebildet aus dem "Basisnamen" ohne die Endung (wird "abgeschnitten") und der neuen Endung .html.

'ne sechs, ich darf nochmal!

Das Tool mmv ist bei den meisten Distributionen standardmäßig nicht dabei und muss nachinstalliert werden. Sollte es nicht auf den Installations-CDs zu finden sein, helfen Suchmaschinen wie Rpmseek [2] oder Rpmfind.net [3]. Den Quell-Code gibt es unter http://ftp.debian.org/debian/pool/main/m/mmv/mmv_1.01b.orig.tar.gz. Debianer installieren das Paket mit dem Kommando apt-get install mmv

Die for-Schleife zum Umbenennen lässt sich mit mmv viel kürzer schreiben:

huhn@huhnix:~> mmv "*.htm" "#1.html"

Das Sternchen in der Ausgangsdatei darf bleiben, gemeint sind alle Dateien im aktuellen Verzeichnis, die auf .htm enden. Für die Zieldateien bezieht sich #1 auf das erste Wildcard aus der Quelle. Es ist sinnvoll, beide Parameter mit Anführungszeichen zu quoten, um sicherzustellen, dass die Shell nicht die Sonderzeichen * und # interpretiert. Liegen im Verzeichnis beispielsweise drei Dateien huhn.txt, hahn.txt und hohn.txt, die die Endung .html erhalten sollen, akzeptiert mmv auch folgenden Aufruf:

huhn@huhnix:~> mmv "h?hn.txt" "h#1hn.htm"

Gerade beim Austausch von Windows- und Linux-Dateien tauchen häufig Großbuchstaben im Dateinamen auf. mmv bietet auch hierfür eine elegante Lösung: Setzen Sie hinter die Raute # ein l (für "lower case", Kleinbuchstaben) oder entsprechend ein u ("upper case", Großbuchstaben):

huhn@huhnix:~> ls
EGBERT.HTM  Huhn.HTM
huhn@huhnix:~> mmv "*.HTM" "#l1.htm"
huhn@huhnix:~> ls
egbert.htm  huhn.htm

mmv akzeptiert sogar mehrere Parameter und hilft beim Vertauschen von diesen. Sollen mehrere Dateien, z. B. datei1_alt.txt und datei2_alt.txt, in alt_datei1.txt und alt_datei2.txt umbenannt werden, gibt es einen passenden mmv-Aufruf: Mit mmv "*_*" "#2_#1" sprechen Sie alle Dateien mit einem Unterstrich in der Mitte an und sagen mmv dann, dass es die Namensteile vor und nach dem Unterstrich vertauschen soll.

Das mmv-Paket enthält auch die Kommandos mcp ("multiple copy"), mad ("multiple append") und mln ("multiple link"), die Tools bieten einige hilfreiche Parameter, z. B. -v, welcher eine Statusmeldung auf die Konsole schickt (datei1_alt.txt -> alt.txt_datei1 : done). Fügen Sie zusätzlich die Option -s an, wird nicht etwa verschoben, sondern ein symbolischer Link auf die alte Datei mit neuem Namen gesetzt.

Glossar

Wildcards

Mit Hilfe dieser "Platzhalter" lassen sich Teile von Zeichenketten ersetzen. Ein Fragezeichen "?" in einem String lässt nur denjenigen Buchstaben dieser Zeichenkette unbestimmt (z. B. h?llo => hallo, hGllo, h7llo,…), an dem sich das Fragezeichen befindet, während ein Stern "*" für beliebig viele verschiedene Zeichen steht (z. B. G*ss => Guss, Genuss). In der Bash sprechen Sie mit *.html alle Dateien an, die auf ".html" enden.

Infos

[1] Heike Jurzik: "Auf dem rechten Pfad – Zu Befehl: pwd, cd, pushd, popd und dirs", LinuxUser 08/2003, S. 80f. http://www.linux-user.de/ausgabe/2003/08/080-zubefehl/

[2] http://rpmseek.com/

[3] http://www.rpmfind.net/

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Zu Befehl: gs & psutils
    PostScript ist eine plattformunabhängige Programmiersprache, in der Texte und Grafiken an Drucker übermittelt werden. Neben den bekannten Viewern für diese Formate gibt es auch auf der Kommandozeile viele nützliche und schnelle Tools, die .ps-Dateien bearbeiten und anzeigen. Wir zeigen, wie Sie mit Ghostscript und den PSUtils "geistreich" arbeiten.
  • sed
    Der Stream-Editor sed hilft beim automatischen Verändern einer oder mehrerer Dateien, vereinfacht sich wiederholende Änderungen oder erstellt gleich ganze Konvertierungsprogramme. Monotone Aufgaben der Textverarbeitung lassen sich so im Handumdrehen lösen.
  • Tricks für die Bash
    Mit ein paar grundlegenden Kniffen bringen Sie Schwung und Farbe in die Arbeit auf der Kommandozeile.
  • Zu Befehl: ssh, scp
    Die klassischen Unix-Programme Telnet und FTP erlauben Verbindungen und Datei-Transfers zu anderen Rechnern im Netz, sind aber unsicher: Alle Daten werden unverschlüsselt übertragen. Deswegen verwenden man heute die SSH-Tools (Secure Shell), die das Gleiche ermöglichen, dabei aber durch Verschlüsselung für Sicherheit sorgen.
  • Cron, At
    Cron- und At-Jobs automatisieren Abläufe auf dem Linux-System, rotieren Logfiles, erstellen automatisch Backups und wecken Sie morgens mit der eigenen MP3-Sammlung – auf Wunsch nur an bestimmten Tagen. Wir zeigen, wie Sie Dinge punktgenau erledigen lassen.
Kommentare

Infos zur Publikation

LU 07/2015: Daten sichern

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Grammatikprüfung in LibreOffice nachrüsten
Grammatikprüfung in LibreOffice nachrüsten
Tim Schürmann, 24.04.2015 19:36, 0 Kommentare

LibreOffice kommt zwar mit einer deutschen Rechtschreibprüfung und einem guten Thesaurus, eine Grammatikprüfung fehlt jedoch. In ältere 32-Bit-Versionen ...

Aktuelle Fragen

Fernwartung oder wartung im haus
heide marie voigt, 29.06.2015 10:37, 2 Antworten
gerne hätte ich jemanden in Bremen nord, der mir weiter hilft - angebote bitte mit preis HMVoigt
Druckeranschluss DCP-195C
heide marie voigt, 29.06.2015 10:35, 1 Antworten
installiert ist linux ubuntu 15.04 offenbar auch der treiber für den Drucker DCP-195C. Die Konta...
keine arbeitsleiste beim einloggen
heide marie voigt, 27.06.2015 13:31, 0 Antworten
seit der neu-installierung von linux ubuntu 15.04 erscheint die arbeitsleiste rechts oben erst na...
raid platte an linux mint 17.1
andreas schug, 23.06.2015 19:44, 1 Antworten
folgende thematik NAS Iomega Storage Center wird auf einmal nicht mehr im netzwerk erkannt .....
SUSE 13.2 - Probleme mit kmail
kris kelvin, 03.06.2015 13:26, 2 Antworten
Hallo, nach dem Umstieg auf 13.1 hatte ich das Problem, daß kmail extrem langsam reagierte. Nun...