mmv
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Multiple move verschiebt, kopiert oder verlinkt mehrere Dateien anhand von Wildcard Mustern. Dies kann manchmal sehr praktisch sein, insbesondere dann, wenn der Befehl mv (move) versagt.
Paket installieren¶
Um diese Funktion nutzen zu können, muss das folgende Paket installiert werden [1]:
mmv (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install mmv
Aufruf¶
Kurze Syntaxbeschreibung für die Verwendung in der Shell [2]:
mmv [-m|x|r|c|o|a|l|s] [-h] [-d|p] [-g|t] [-v|n] [--] QUELLE ZIEL
Beschreibung¶
Mit Hilfe von mmv lassen sich mehrere Dateien gleichzeitig bearbeiten. Es können Dateien kopiert, verschoben, verlinkt oder auch aneinander gehängt werden. Jede der einzelnen Funktionen lässt sich auch über einen eigenen Befehl ansprechen:
mad
: Dateien anhängen (entspricht Option-a
)mcp
: Dateien kopieren (entspricht Option-c
)mln
: Dateien verlinken (entspricht Option-l
)mmv
: Dateien verschieben (entspricht Option-x
)
mmv verschiebt (oder kopiert, verbindet oder verlinkt) alle Ursprungsdateien, die auf das Muster QUELLE
passen, zum Zielnamen, der durch das Muster ZIEL
gegeben ist.
Dies geschieht in einer sicheren Weise, insbesondere kommt es nicht zu unbeabsichtigten Löschungen aufgrund von Namenskollisionen der Zielnamen mit bereits bestehenden Dateinamen oder anderen Zielnamen.
Optionen¶
Was genau mmv macht, wird über die Aufgabenoptionen festgelegt, die hier kurz tabellarisch zusammengefasst sind:
mmv - Optionen | |
Option | Beschreibung |
-a | Hängt den Inhalt der Ursprungsdateien (von) an die Dateien mit Zielnamen (nach) an. Falls die Zieldatei nicht existiert, wird sie angelegt. Anders als alle anderen Optionen erlaubt -a , dass mehrere Ursprungsdateien die selbe Zieldatei haben. Auch Verkettungen und Ringe sind erlaubt. |
-c | Kopiert die Ursprungsdateien in die Zieldateien. Verkettungen und Ringe sind nicht erlaubt. |
-l | Verlinkt die Zieldateien auf die Ursprungsdateien. Beide müssen sich auf dem selben Gerät (in der Regel Partition) befinden. Beim Ursprung darf es sich nicht um ein Verzeichnis handeln. Verkettungen und Ringe sind nicht erlaubt. |
-m | Verschiebt die Ursprungsdateien zu den Zieldateien . Beide müssen sich auf dem selben Gerät (in der Regel Partition) befinden. Verzeichnisse werden nicht verschoben. |
-o | Überschreibt die Zielnamen mit den Ursprungsdateien. Falls die Zieldatei besteht, wird sie überschrieben, ansonsten wird eine neue Datei angelegt. |
-r | Benennt die Ursprungsdateien oder Verzeichnis in den Zielnamen um. Der Zielname darf keinen Pfad beinhalten: Die Datei verbleibt in jedem Fall im momentanen Verzeichnis. Diese Option ist die einzige Möglichkeit, um Verzeichnisse mit Hilfe von mmv umzubenennen. |
-s | Das selbe wie die Option -l , nur das hier "Soft-Links" statt "Hard-Links" verwendet werden. Damit der resultierende Link auf die Ursprungsdatei verweist, muss der Ursprungsname entweder mit einem "/" beginnen, oder die Zieldatei muss sich entweder im aktuellen Verzeichnis oder im selben Verzeichnis wie die Ursprungsdatei befinden. Bei dieser Option können sich Ursprung und Ziel auf unterschiedlichen Geräten (Partitionen) befinden und der Ursprung darf ein Verzeichnis sein. |
-x | Das selbe wie die Option -m , nur das Verschiebungen über Geräte (Partitionen) hinweg möglich sind. |
Es können mehrere QUELLE-- ZIEL Muster angegeben werden, indem sie auf der Kommandozeile weggelassen werden und statt dessen anschließend über die Standardeingabe jeweils in einer eigenen Zeile angegeben werden. So würde zum Beispiel:
mmv a b c d
a in b und c in d umbenennen.
Das QUELLE Muster¶
Das QUELLE-Muster ist ein Dateiname mit eingebauten Wildcards: *
, ?
, [
...]
und ;
. Die ersten drei haben ihre übliche Bedeutung. Die ;
Wildcard ist nützlich um Dateien in einer beliebigen Verzeichnistiefe zu erreichen. Es entspricht einem Beliebig oft wiederholtem */
. Es kann nur am Anfang eines Musters oder direkt nach einem /
auftreten.
Dateien, die mit einem Punkt . beginnen werden nur durch QUELLE Muster erfasst, die explizit durch mit einem Punkt . beginnen. Dieses Verhalten lässt sich jedoch mit Hilfe der Option -h
umschalten.
Achtung!
Da die Shell normalerweise alle Wildcards expandiert (in passende Dateinamen umwandelt), bevor sie die Kommandozeilenargumente an mmv weiterreicht, ist es üblicherweise notwendig die QUELLE und ZIEL Muster in Anführungszeichen zu setzen.
Das ZIEL Muster¶
Beim ZIEL Muster handelt es sich um Dateinamen mit eingebetteten Wildcard-Indizes, wobei ein Index aus dem #
Zeichen gefolgt von einer Reihe von Ziffern besteht.
Wenn eine Ursprungsdatei auf ein QUELLE Muster passt, so wird der Zielname für diese Datei aus dem ZIEL Muster gebildet, indem die Wildcard-Indizes durch die tatsächlichen Zeichen ersetzt werden, die auf die entsprechende Wildcard passten.
Ein einfaches Beispiel wäre die Entfernung des ersten Punktes in Dateinamen. Das QUELLE Muster müsste dann *.*
, das ZIEL Muster #1#2
heißen. Aber es lässt sich noch mehr machen: Ist zum Beispiel das QUELLE Muster abc*.*
und das ZIEL Muster xyz#2.#1
, so wird aus abc.txt das Ziel xyztxt.. (Die erste Wildcard *, passte auf das Muster "" (Leerer String), und die zweite Wildcard * passte auf "txt").
Um die Zeichen, die durch eine Wildcard gefunden wurden, vor dem Einfügen in den Zielnamen in Groß- bzw. Kleinschreibung umzuwandeln ist ein l
(für kleine Buchstaben) bzw. ein u
zwischen dem #
und den Ziffern einzUfügen. Also zum Beispiel xyz#u2.#1
.
Um einem beliebigen Zeichen seine besondere Bedeutung zu nehmen, muss es ein \\
vorangestellt bekommen. Auf diese Weise lassen sich auch Dateinamen erzeugen, in denen direkt auf einen Wildcard-Index eine Ziffer folgen muss zum Beispiel #a1\1
.
Verkettungen und Ringe¶
Eine Verkettung ist eine Folge von Aktionen, in denen der Zielname einer Aktion als Ursprungsname in einer anderen Aktion verwendet wird. Zu Beispiel ergibt
mmv a b b c
die Verkettung "a" → "b" → "c" an.
Ein Ring ist eine Verkettung, in der das letzte Ziel sich wieder auf den ersten Ursprungsnamen bezieht, wie zum Beispiel in mmv a a
.
Beispiele¶
Alle Dateien im aktuellen Verzeichnis, die auf ".c" enden in einer großen Datei big vereinen:
mmv -a "*.c" big
Den Inhalt einer Datei f verdoppeln:
mmv -a f f
Alle Dateien im aktuellen Verzeichnis, die auf ".html" enden so umbenennen, dass sie auf ".xhtml" enden:
mmv "*.html" #1.xhtml
Alle Dateien auf dem System, die mit ".jpg" enden ins aktuelle Verzeichnis kopieren:
mmv -c ";*.jpg" ./#2.jpg
Bei allen Dateien im aktuellen Verzeichnis, das erste Vorkommen von "-" durch "_" ersetzen:
mmv "*-*" "#1_#2"
Links¶
Shell/Befehlsübersicht Übersicht über verschiedene Shell-Befehle