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 01/2015: E-Books im Griff

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

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

PCLinuxOS Version 2014.08 "FullMonty" Umstellung auf deutsch
Karl-Heinz Welz, 19.12.2014 09:55, 3 Antworten
Hallo, liebe Community, ich bin 63 Jahre alt und möchte jetzt nach Jahrzehnten Windows zu Linux...
ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.