528 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?

6voto

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:

3voto

user9869932 Punkte 5353

In meinem Fall gab es zu viele Dateien mit nicht verwandten Namen.

Am Ende habe ich folgendes benutzt:

$  for i in $(ssh remote 'ls ~/dir'); do scp remote:~/dir/$i ./$i; done
1.txt                                         100%  322KB   1.2MB/s   00:00
2.txt                                         100%   33KB 460.7KB/s   00:00
3.txt                                         100%   61KB 572.1KB/s   00:00

$

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 ....

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