Ich muss viele Dateien von einem PC auf einen anderen transportieren (beide Linux). Ich würde dafür gerne verwenden scp
, aber es kann immer scp
nur eine Datei gleichzeitig übertragen werden.
Wie kann ich das machen?
ich habe
- Keine Möglichkeit, rsync oder ein anderes Protokoll zu verwenden
- Keine Möglichkeit, passphrasenfreie Zertifikate zu verwenden (aber ein Zertifikat mit einer Passphrase haben)
- Eine Liste der zu übertragenden Dateien und eine Liste mit dem Zielpfad der Dateien auf dem anderen Server
- Die Dateien sind auf viele Verzeichnisse verteilt und nicht alle Dateien in den Verzeichnissen, die ich kopieren möchte
Wenn möglich, möchte ich transparent gzipen und ungzipen, um Bandbreite zu sparen!
Ist das möglich?
-C'' on a line by itself will cause the current directory to be changed to the directory specified on the following line. Names are terminated by newlines unless --null is specified. Note that --null also disables the special handling of lines containing
-C ''."Ich bin mir ziemlich sicher, dass dies nicht zutrifft, zumindest nicht für den
scp
Befehl, der von OpenSSH bereitgestellt wird, der in den meisten Linux-Distributionen enthalten ist.Ich benutze
scp file1 file2 ... fileN user@host:/destination/directory/
ziemlich häufig.Für die transparente Komprimierung ist dieses Protokoll im SSH-Protokoll integriert und
scp
kann verwendet werden, wenn Sie die-C
Option in der Befehlszeile angeben. Für viele ähnliche kleine Dateien wird die von akira vorgeschlagene Option tar + gz für eine bessere Komprimierung empfohlen, da sie die Ähnlichkeit zwischen solchen Dateien nutzen kann, bei denenscp
jede Datei als separate Einheit komprimiert wird. Ich bevorzuge im Allgemeinen die Verwendung von scp, da es einfacher ist, eine teilweise Übertragung fortzusetzen (oder, obwohl ich in dieser Situation weiß, dass der Fragesteller nicht über die Option verfügt),rsync
da dies sowohl noch einfacher ist, als auch die gesamte Option tar + gz gemeinsam nutzt -stream Komprimierungsvorteil.quelle
Nicht
scp -r yourdir otherhost:/otherdir
funktioniert?Versuchen Sie dies dann:
Das
z
-flag to tar macht die Komprimierung. Oder Sie können -C für ssh verwenden:quelle
-C
tun?Unter RHEL5 ist dies die einzige mir bekannte Möglichkeit, eine Liste von Dateien, die Sonderzeichen enthalten (z. B. ein Leerzeichen), sicher zu kopieren. Erstellen Sie ein Shell-Skript und fügen Sie Folgendes hinzu:
quelle
Es kann ohne viel Mühe gemacht werden.
Ich erstelle einfach eine Liste von Dateien mit dem Hostnamen neben jeder Datei und scp scheint es gut zu analysieren. dh
Scp scheint mit dieser Syntax gut zu funktionieren. Da ich es ohne den Hostnamen neben jeder Datei versuchte, schlug es nach der ersten Datei fehl. Ich erinnere mich an eine andere Syntax, die ich zuvor verwendet habe, und werde sie veröffentlichen, sobald ich sie gefunden habe.
quelle
~/
kann größtenteils weggelassen werden - SCP arbeitet relativ zum Basisverzeichnis. .. Wenn Sie eine Liste von woanders in haben$list
:scp $(echo "$list"|sed "s/^/$srchost:/") local_destination
(Dies wird jedoch für Dateinamen mit Leerzeichen brechen)Ich würde empfehlen, Teile einen Befehl wie diesen zu verwenden, um ein Archiv aus Ihrer Dateiliste zu erstellen
tar -cvf allfiles.tar -L mylist.txt
Verwenden Sie dann scp, um das Archiv herunterzuladen.
scp user @ remotehost: ~ / allfiles.tar
/programming/8033857/tar-archiving-that-takes-input-from-a-list-of-files
quelle