Home / LinuxUser / 2003 / 10 / Zu Befehl: mv & mmv

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

War doch klar...
(226 Punkte bei 13 Stimmen)
Re: Skype für 64-Bit-Prozessor u. Suse 12.1
(161 Punkte bei 4 Stimmen)
Re: War doch klar...
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

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/

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

979 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 03/2012

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Duden Korrektor unter 64-Bit
Duden Korrektor unter 64-Bit
Tim Schürmann, 06.02.2012 10:36, 0 Kommentare

Der Duden Korrektor bietet eine äußerst nützliche Rechtschreib- und Grammatikkorrektur für LibreOffice und bringt in der aktuellen Version 8 e...

Aktuelle Fragen

rndc reload zone - failed bad zone
Ludwig jun. B., 06.02.2012 16:08, 2 Antworten
Schönen guten Tag, ich habe folgendes Problem. Immer wenn ich folgendes Kommando ausführen bek...
Skype für 64-Bit-Prozessor u. Suse 12.1
Klaus Sigerist, 05.02.2012 11:39, 3 Antworten
Hallo Gemeinde! Ich bin nur ein einfacher Nutzer und habe Probleme mit der Installation von Skyp...
8! Anfängerfrage :) Wie finde ich in Ubuntu die Datenträger (Bild, Text)
samuel leusam, 04.02.2012 15:53, 2 Antworten
Ich habe neu Ubuntu. Wenn ich die SD Karte im Laptop einstecke, erkennt er sie und gibt ihr den N...
OpenSuse 12.1-Service Kit 01/12
Christoph-J. Walter, 28.01.2012 08:52, 2 Antworten
Hallo Gemeinde, ich habe 12.1 neu installiert. Alles in Ordnung! Nun möchte ich das Service Kit (...
Ubuntu 11.10 konfigurieren
Michael Hinz, 27.01.2012 17:52, 1 Antworten
Ubuntu läuft bei mir. Allerdings nur, wenn die Daten-CD eingelegt ist. Unabhängig von Bios-Einste...