Kopieren einer Datei in mehrere Verzeichnisse mit einem Befehl in Linux
Das Kopieren einer Datei über die Linux-Befehlszeile ist einfach. Was ist jedoch, wenn Sie dieselbe Datei an mehrere verschiedene Speicherorte kopieren möchten? Das ist auch einfach und wir zeigen Ihnen, wie Sie dies mit einem einzigen Befehl tun.
Normalerweise würde man zum Kopieren einer Datei die cp
Befehl, Verknüpfung zur Quelldatei und zum Zielverzeichnis:
cp ~ / Documents / FileToBeCopied.txt ~ / TextFiles /
Um es in zwei weitere Verzeichnisse zu kopieren, würden viele Leute den Befehl zwei weitere Male mit unterschiedlichen Zielen ausführen:
cp ~ / Documents / FileToBeCopied.txt ~ / Dropbox /
cp ~ / Documents / FileToBeCopied.txt / media / lori / MYUSBDRIVE /
Wir können jedoch dieselbe Aufgabe mit einem Befehl ausführen:
echo dir1 dir2 dir3 | xargs -n 1 cp file1
So funktioniert dieser Befehl. Das Echo
Der Befehl schreibt normalerweise auf den Bildschirm. In diesem Fall möchten wir jedoch die Ausgabe von Echo
Befehl als Eingabe für die Xargs
Befehl. Dazu verwenden wir das Pipe-Symbol ( |
), das die Ausgabe von einem Befehl als Eingabe an einen anderen liefert. Das Xargs
Befehl wird das ausführen cp
dreimal den Befehl an, wobei jedes Mal der nächste Verzeichnispfad angefügt wurde, der von Echo
Befehl bis zum Ende der cp
Befehl. Es gibt drei Argumente, an die übergeben werden Xargs
, aber die -n 1
Option auf der Xargs
Befehl sagt ihm, dass immer nur eines dieser Argumente an das angehängt werden soll cp
Befehl jedes Mal, wenn es ausgeführt wird.
Um bei unserem Beispiel von früher zu bleiben, trennen sich die drei cp
Befehle können wie folgt zu einem Befehl zusammengefasst werden:
echo ~ / TextFiles / ~ / Dropbox / media / lori / MYUSBDRIVE | xargs -n 1 cp ~ / Documents / FileToBeCopied.txt
Wenn die zu kopierende Datei in einem der angegebenen Zielverzeichnisse vorhanden ist, wird die Datei in diesem Ziel automatisch ersetzt. Sie werden nicht gefragt, ob Sie die Datei ersetzen möchten. (Normalerweise bei der Verwendung von cp
Wenn Sie eine Datei an einen bestimmten Ort kopieren möchten, können Sie den Befehl hinzufügen -ich
Option, um zu fragen, ob Sie eine vorhandene Datei ersetzen möchten. Jedoch die -ich
Option ist eine interaktive Option (verursacht die cp
(Befehl zum Eingeben des Benutzers) und Sie können keine interaktive Option mit der cp
Befehl bei Verwendung in Verbindung mit Xargs
.)
Eine andere Sache, die zu beachten ist, ist, dass Sie beim Kopieren einer sehr großen Datei den No-Clobber ( -n
) Option auf die cp
Befehl im Einzelbefehl oben. Diese Option verhindert automatisch, dass eine Datei in einem Ziel überschrieben wird, wenn sie dort bereits vorhanden ist. Wenn Sie eine sehr große Datei über ein Netzwerk kopieren, ist dies möglicherweise langsam und Sie möchten möglicherweise nicht die zum Kopieren und Ersetzen der Datei erforderlichen Ressourcen verwenden. Der folgende Befehl fügt die -n
Option und kopiert die Datei nicht an ein Ziel, das in den Argumenten der Echo-Anweisung aufgeführt ist, wenn die Datei in diesem Ziel bereits vorhanden ist.
echo ~ / TextFiles / ~ / Dropbox / media / lori / MYUSBDRIVE | xargs -n 1 cp -n ~ / Documents / FileToBeCopied.txt
Geben Sie in der Befehlszeile in Linux man echo, man xargs oder man cp ein, um weitere Informationen zu diesen Befehlen zu erhalten.