Startseite » wie man » Kopieren einer Datei in mehrere Verzeichnisse mit einem Befehl in Linux

    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.