478 Stimmen

Scp oder sftp kopieren mehrerer Dateien mit einem einzigen Befehl

Ich möchte Dateien von/zum Remote-Server in verschiedenen Verzeichnissen kopieren. Zum Beispiel möchte ich diese 4 Befehle gleichzeitig ausführen.

scp remote:A/1.txt local:A/1.txt
scp remote:A/2.txt local:A/2.txt
scp remote:B/1.txt local:B/1.txt
scp remote:C/1.txt local:C/1.txt

Was ist der einfachste Weg, das zu tun?

608voto

ios.id0 Punkte 6213

Kopiere mehrere Dateien vom Remote zum lokalen Rechner:

$ scp dein_benutzername@remote.edu:/some/remote/directory/\{a,b,c\} ./

Kopiere mehrere Dateien vom lokalen zum Remote Rechner:

$ scp foo.txt bar.txt dein_benutzername@remotehost.edu:~
$ scp {foo,bar}.txt dein_benutzername@remotehost.edu:~
$ scp *.txt dein_benutzername@remotehost.edu:~

Kopiere mehrere Dateien vom Remote zum anderen Remote Rechner:

$ scp dein_benutzername@remote1.edu:/some/remote/directory/foobar.txt \
dein_benutzername@remote2.edu:/some/remote/directory/

Quelle: http://www.hypexr.org/linux_scp_help.php

325voto

Gtr_py Punkte 3511

Vom lokalen zum Server:

scp datei1.txt datei2.sh benutzername@ip.of.server.kopieren:~/pfadzumhochladen

Vom Server zum lokalen (bis OpenSSH v9.0):

scp -T benutzername@ip.of.server.kopieren:"datei1.txt datei2.txt" "~/ihrpfadzumkopieren"

Vom Server zum lokalen (OpenSSH v9.0+):

scp -OT benutzername@ip.of.server.kopieren:"datei1.txt datei2.txt" "~/ihrpfadzumkopieren"

Von man 1 scp:

-O      Verwenden Sie das veraltete SCP-Protokoll für Dateiübertragungen anstelle des SFTP-Protokolls. Das Erzwingen der
        Verwendung des SCP-Protokolls kann für Server erforderlich sein, die kein SFTP implementieren, für die Abwärtskompatibilität für
        bestimmte Dateinamens-Wildcard-Muster und zum Erweitern von Pfaden mit einem ‘~’-Präfix für ältere SFTP
        Server.

GESCHICHTE
        Seit OpenSSH 9.0 verwendet scp standardmäßig das SFTP-Protokoll für Übertragungen.

97voto

Jiri Kremser Punkte 12289

Sie können ganze Verzeichnisse kopieren, indem Sie den -r Schalter verwenden. Wenn Sie Ihre Dateien in ein eigenes Verzeichnis isolieren können, können Sie alles auf einmal kopieren.

scp -r ./verzeichnis-mit-dateien benutzer@remote-server:upload-pfad

scp -r benutzer@remote-server:pfad-zu-verzeichnis-mit-dateien download-pfad

zum Beispiel

scp -r root@192.168.1.100:/var/log ~/backup-logs

Oder wenn es nur wenige gibt, können Sie verwenden:

scp 1.txt 2.txt 3.log benutzer@remote-server:upload-pfad

76voto

alev Punkte 1334

Wie Jiri erwähnt hat, können Sie scp -r user@host:/some/remote/path /some/local/path verwenden, um Dateien rekursiv zu kopieren. Dies setzt voraus, dass es ein einzelnes Verzeichnis gibt, das alle Dateien enthält, die Sie übertragen möchten (und nichts anderes).

SFTP bietet jedoch eine Alternative, wenn Sie Dateien aus mehreren verschiedenen Verzeichnissen übertragen möchten und die Ziele nicht identisch sind:

sftp user@host << EOF
  get /some/remote/path1/file1 /some/local/path1/file1
  get /some/remote/path2/file2 /some/local/path2/file2
  get /some/remote/path3/file3 /some/local/path3/file3
EOF

Dies verwendet die "here doc"-Syntax, um eine Abfolge von SFTP-Eingabebefehlen zu definieren. Alternativ könnten Sie die SFTP-Befehle in eine Textdatei einfügen und sftp user@host -b batchFile.txt ausführen.

42voto

Vouze Punkte 1598

Die Antworten mit {file1,file2,file3} funktionieren nur mit bash (remote oder lokal)

Der richtige Weg ist:

scp user@remote:'/path1/file1 /path2/file2 /path3/file3' /localPath

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X