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

title_2014_09

Digitale Ausgabe: Preis € 5,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

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...
Öhm - wozu Benutzername, wenn man dann hier mit Klarnamen angezeigt wird?
Thomas Kallay, 03.07.2014 20:30, 1 Antworten
Hallo Team von Linux-Community, kleine Zwischenfrage: warum muß man beim Registrieren einen Us...