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?

5voto

Pablo Bianchi Punkte 1362

Es ist einfacher, ohne die Verwendung von scp vorzugehen:

tar cf - Datei1 ... Datei_n | ssh Benutzer@Server 'tar xf -'

Dies ermöglicht es Ihnen auch, einige Dinge zu tun, wie z.B. den Datenstrom zu komprimieren (-C) oder (seit OpenSSH v7.3) -J, um beliebig oft über einen (oder mehrere) Proxy-Server zu springen.

Vermeiden Sie die Verwendung von Passwörtern, indem Sie Ihren öffentlichen Schlüssel in ~/.ssh/authorized_keys (auf dem Server) mit ssh-copy-id (auf dem Client) kopieren.

Auch hier gepostet hier (mit mehr Details) und hier.

4voto

unxnut Punkte 8369
scp remote:"[A-C]/[12].txt" local:

2voto

dminear Punkte 101

In meinem Fall bin ich auf die Verwendung des sftp-Befehls beschränkt.
Daher musste ich eine Stapeldatei mit sftp verwenden. Ich habe ein Skript erstellt wie folgt. Dies setzt voraus, dass Sie im Verzeichnis /tmp arbeiten und die Dateien im destdir_on_remote_system auf dem Remote-System ablegen möchten. Dies funktioniert auch nur mit einem nicht-interaktiven Login. Sie müssen öffentliche/private Schlüssel einrichten, damit Sie sich ohne Eingabe eines Passworts anmelden können. Ändern Sie bei Bedarf.

#!/bin/bash

cd /tmp
# Skript mit Liste der zu übertragenden Dateien starten
ls -1 fileset1* > batchfile1
ls -1 fileset2* >> batchfile1

sed -i -e 's/^/put /' batchfile1
echo "cd destdir_on_remote_system" > batchfile
cat batchfile1 >> batchfile
rm batchfile1

sftp -b batchfile user@host

2voto

Guy Avraham Punkte 3086

In dem speziellen Fall, in dem alle Dateien die gleiche Erweiterung haben, aber mit unterschiedlichem Suffix (sagen wir die Anzahl der Protokolldateien), verwenden Sie das Folgende:

scp benutzername@ip.der.entfernten.maschine:/pfad/zum/protokoll/ordner/some_log_file.* ./

Dies kopiert alle Dateien mit dem Namen some_log_file aus dem angegebenen Ordner innerhalb des Remote, d.h. - some_log_file.1, some_log_file.2, some_log_file.3 ....

2voto

fat43r 80ard Punkte 37

HINWEIS: Ich entschuldige mich im Voraus, dass ich nur einen Teil der obigen Frage beantworte. Diese Befehle habe ich jedoch nützlich für meine aktuellen Unix-Bedürfnisse gefunden.

Spezifische Dateien von einem lokalen Rechner auf einen Remote-Rechner hochladen:

~/Desktop/dump_files$ scp file1.txt file2.txt lab1.cpp usw.ext dein-benutzername@remotemaschine.edu:Ordner1/ZielordnerFürDateien/

Einen gesamten Ordner von einem lokalen Rechner auf einen Remote-Rechner hochladen:

~$ scp -r Desktop/dump_files dein-benutzername@remotemaschine.edu:Ordner1/ZielordnerFürDateien/

Einen gesamten Ordner von einem Remote-Rechner auf einen lokalen Rechner herunterladen:

~/Desktop$ scp -r dein-benutzername@remote.host.edu:Öffentlich/web/ Desktop/

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