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

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Mandriva gibt Distribution in die Hände der Community
(268 Punkte bei 24 Stimmen)
Neues vom Systemd
(161 Punkte bei 4 Stimmen)
Mandriva in Nöten
(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

1170 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 06/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

Adobe AIR
Adobe-AIR-Programme installieren und (manuell) starten
Tim Schürmann, 14.05.2012 13:09, 0 Kommentare

Es gibt sie noch: neue Anwendungen, die Adobes Integrated Runtime voraussetzen. Aktuellstes und vermutlich auch größtes Beispiel ist das Adventure Botanicula

Aktuelle Fragen

gibt es ein Kommandozeilen Tool, um ein X11-Fenster in ein Anderes einzubetten?
GoaSkin , 21.05.2012 16:44, 0 Antworten
Das XEmbed-Protokoll ist u.A. dazu gedacht, dass man eine X11-Anwendung in eine andere wie ein Wi...
Apache2, Options -Indexes geht nicht
no no, 12.05.2012 19:01, 8 Antworten
Habe in apache2.conf folgendes stehen: Options -Indexes ...
LInux auf Dell LS H500
Andreas Endresl, 09.05.2012 08:54, 2 Antworten
Habe einen alten Dell Latitude LS H500 nur mit ext. Floppy und CD es geht nur immer eines von den...
Datenwiederherstellung unter Ubuntu 12.04 mit "Simple Backup" nach Umzug von Linux Mint
Christian Lottmann, 07.05.2012 13:33, 0 Antworten
Vor dem Umzug auf Ubuntu 12.04 habe ich unter Linux MInt mit "Simple Backup" voll (15.4.2012) und...
DKMS für den propritären NVIDIA-Treiber
Commander Data, 26.04.2012 22:02, 2 Antworten
Hallo an die Gemeinde. Ich habe hier ein interessantes Stück openSuSE gefunden. http://forums.op...