28Jun

So kopieren Sie eine Datei in mehrere Verzeichnisse mit einem Befehl in Linux

Das Kopieren einer Datei mit der Linux-Befehlszeile ist einfach. Was aber, wenn Sie dieselbe Datei an mehrere verschiedene Orte kopieren möchten? Das ist auch einfach, und wir zeigen Ihnen, wie Sie das mit einem Befehl machen.

Um eine Datei zu kopieren, verwenden Sie normalerweise den Befehl cp, der mit der Quelldatei und dem Zielverzeichnis verknüpft:

cp ~ /Documents/ FileToBeCopied.txt ~ /TextFiles/

Um es in zwei weitere Verzeichnisse zu kopieren, würden viele Leute einfach den Befehl zwei ausführenmehrmals mit verschiedenen Zielen:

cp ~ /Documents/ FileToBeCopied.txt ~ /Dropbox/ cp ~ /Documents/ FileToBeCopied.txt /media/lori/MYUSBDRIVE/

Allerdings können wir dieselbe Aufgabe mit einem Befehl ausführen:

echo dir1 dir2 dir3 |xargs -n 1 cp file1

So funktioniert dieser Befehl. Der Befehl echo schreibt normalerweise auf den Bildschirm. In diesem Fall möchten wir jedoch die Ausgabe des echo-Befehls als Eingabe für den Befehl xargs bereitstellen. Dazu verwenden wir das Pipe-Symbol( |), das die Ausgabe eines Befehls als Eingabe an einen anderen Befehl weiterleitet. Der Befehl xargs führt den Befehl cp dreimal aus, wobei er jedes Mal den nächsten Verzeichnispfad anhängt, der vom Befehl ech auf das Ende des Befehls cp geleitet wird. Es gibt drei Argumente, die an xargs übergeben werden, aber die Option -n 1 im Befehl xargs sagt, dass sie jedesmal nur eines dieser Argumente an den Befehl cp anhängen soll, wenn es ausgeführt wird.

Um also bei unserem Beispiel von früher zu bleiben, können die obigen drei separaten cp-Befehle zu einem Befehl wie diesem kombiniert werden:

echo ~ /TextFiles/ ~ / Dropbox /media/lori/ MYUSBDRIVE |xargs -n 1 cp ~ /Documents/ FileToBeCopied.txt

Beachten Sie, dass die Datei in diesem Ziel automatisch ersetzt wird, wenn die kopierte Datei in einem der angegebenen Zielverzeichnisse vorhanden ist. Sie werden nicht gefragt, ob Sie die Datei ersetzen möchten.(Wenn Sie den Befehl cp verwenden, um eine Datei an einen einzigen Speicherort zu kopieren, können Sie normalerweise die Option -i hinzufügen, um zu fragen, ob Sie eine vorhandene Datei ersetzen möchten. Die Option -i ist jedoch eine interaktive Optioncp-Befehl, um nach Eingaben vom Benutzer zu fragen, und Sie können keine interaktive Option mit dem cp-Befehl verwenden, wenn Sie ihn in Verbindung mit xargs verwenden.)

Eine andere Sache, die Sie beachten sollten, ist, dass Sie möglicherweise eine sehr große Datei kopierenIch möchte die Option no-clobber( -n) zum Befehl cp im obigen Befehl hinzufügen. Diese Option verhindert automatisch, dass eine Datei in einem Ziel überschrieben wird, wenn sie dort bereits existiert. Wenn Sie eine sehr große Datei über ein Netzwerk kopieren, ist dies möglicherweise langsam und Sie sollten möglicherweise die zum Kopieren und Ersetzen der Datei erforderlichen Ressourcen nicht verwenden. Der folgende Befehl fügt die Option -n hinzu und kopiert die Datei nicht an ein Ziel, das in den Argumenten für die echo-Anweisung aufgeführt ist, wenn die Datei bereits in diesem Ziel existiert.

echo ~ /TextFiles/ ~ / Dropbox /media/lori/ MYUSBDRIVE |xargs -n 1 cp -n ~ /Documents/ FileToBeCopied.txt

Geben Sie in der Befehlszeile unter Linux die Befehle echo, man xargs oder man cp ein, um weitere Informationen zu diesen Befehlen zu erhalten.