Ich möchte Dateien von / auf einen 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?
rsync
, vielleicht kann es Ihnen in diesem Fall und vielen bevorstehenden Fällen helfen. Um die Eingabe von Passwörtern zu vermeiden (geschweige denn mehrmals), sollten Sie sich überssh
öffentliche / private Schlüsselscp [email protected]:'/etc/openvpn/ca.crt /etc/openvpn/client/client0.crt /etc/openvpn/client/client0.key /etc/openvpn/client/ta.key' ./
.Antworten:
Kopieren Sie mehrere Dateien von remote nach lokal:
Kopieren Sie mehrere Dateien von lokal nach remote:
Kopieren Sie mehrere Dateien von Remote zu Remote:
Quelle: http://www.hypexr.org/linux_scp_help.php
quelle
~
oder./
nur scp-Dateien erstellen .\{a,b,c\}
die Dateien in einer einzigen Verbindung / einem Stapel übertragen werden (da sie auf dem Remote-Host erweitert werden), während mit using{a,b,c}
mehrere Verbindungen geöffnet werden und der Overhead gleich ist ziemlich auffällig beim Übertragen vieler DateienVom lokalen zum Server:
scp file1.txt file2.sh [email protected]:~/pathtoupload
Vom Server zum lokalen:
scp -T [email protected]:"file1.txt file2.txt" "~/yourpathtocopy"
quelle
-T
Option hinzu, um diesen Fehler zu unterdrücken.Sie können ganze Verzeichnisse mit
-r
switch kopieren. Wenn Sie also Ihre Dateien in ein eigenes Verzeichnis isolieren können, können Sie alles auf einmal kopieren.so zum Beispiel
Oder wenn es nur wenige davon gibt, können Sie Folgendes verwenden:
quelle
Wie Jiri bereits erwähnt hat, können Sie
scp -r user@host:/some/remote/path /some/local/path
Dateien rekursiv kopieren. Dies setzt voraus, dass es ein einziges Verzeichnis gibt, das alle Dateien enthält, die Sie übertragen möchten (und sonst nichts).SFTP bietet jedoch eine Alternative, wenn Sie Dateien aus mehreren verschiedenen Verzeichnissen übertragen möchten und die Ziele nicht identisch sind:
Dies verwendet die Syntax "here doc" , um eine Folge von SFTP-Eingabebefehlen zu definieren. Alternativ können Sie die SFTP-Befehle in eine Textdatei einfügen und ausführen
sftp user@host -b batchFile.txt
quelle
scp
zu lange gegoogelt und das Handbuch analysiert , um diese Funktion zu finden, und ich denke, scp hat sie nicht./home/vagrant/Code/
anstelle von verwenden musste~/Code/
.- r
für Verzeichnisse hinzuzufügenDie Antworten mit
{file1,file2,file3}
funktionieren nur mit Bash (auf Remote oder lokal)Der wahre Weg ist:
quelle
{…, …, …}
Arbeiten in vielen Muscheln, nicht nur in Bash. Dies funktioniert jedoch in jeder Shell und ist daher deutlich besser.Nachdem ich eine Weile mit scp gespielt habe, habe ich die robusteste Lösung gefunden:
(Achten Sie auf einfache und doppelte Anführungszeichen)
Lokal zu Remote:
Remote zu lokal:
Beachten Sie, dass alles nach "HOST:" an die Fernbedienung gesendet und dort analysiert wird. Wir müssen also sicherstellen, dass sie nicht von der lokalen Shell verarbeitet werden. Aus diesem Grund werden einfache Anführungszeichen verwendet. Die doppelten Anführungszeichen werden verwendet, um Leerzeichen in den Dateinamen zu behandeln.
Wenn sich alle Dateien im selben Verzeichnis befinden, können wir * verwenden, um sie alle abzugleichen, z
Im Vergleich zur Verwendung der "{}" - Syntax, die nur von einigen Shells unterstützt wird, ist diese universell
quelle
{}
Syntax erleichtert das Kopieren mehrerer Dateien aus demselben Verzeichnis. Gibt es eine Möglichkeit, dies zu tun,scp -r
sodass es"FILE1" "FILE2"
sich um relative Pfade und nicht um absolute Pfade zu den Dateien handeln kann?Der einfachste Weg ist
Die Liste {..} kann also Verzeichnisse enthalten (A, B und C sind hier Verzeichnisse; "1.txt" und "2.txt" sind Dateinamen in diesen Verzeichnissen).
Obwohl es alle diese vier Dateien in ein lokales Verzeichnis kopieren würde - nicht sicher, ob Sie das wollten.
Im obigen Fall werden die Remote-Dateien A / 1.txt, A / 2.txt, B / 3.txt und C / 4.txt in ein einzelnes lokales Verzeichnis mit den Dateinamen ./1.txt kopiert. ./2.txt, ./3.txt und ./4.txt
quelle
sh
.local$ scp -r remote:{A/1.txt,A/2.txt,B/3.txt,C/4.txt,D,F} ./
Problem : Kopieren mehrerer Verzeichnisse vom Remoteserver auf den lokalen Computer mit einem einzigen SCP-Befehl und Beibehalten jedes Verzeichnisses auf dem Remoteserver.
Lösung : SCP kann dies problemlos tun. Dies löst das lästige Problem der mehrfachen Eingabe eines Kennworts bei Verwendung von SCP mit mehreren Ordnern. Das spart somit auch viel Zeit!
z.B
PS: Motiviert durch diese großartige Antwort: scp oder sftp kopieren mehrere Dateien mit einem einzigen Befehl
Basierend auf den Kommentaren funktioniert dies auch in Git Bash unter Windows
quelle
Kopieren Sie mehrere Verzeichnisse:
quelle
Sie können dies folgendermaßen tun:
Dadurch werden alle aufgelisteten Dateinamen in das lokale Verzeichnis heruntergeladen, in dem Sie sich befinden.
Stellen Sie sicher, dass zwischen den Dateinamen keine Leerzeichen stehen. Verwenden Sie nur ein Komma
,
.quelle
/path/to/files/\\{file1.ext,file2.ext,file3.ext\\}
hätten die Dateien unterschiedliche Erweiterungen. Hinweis für PowerShell-Benutzer (jetzt, da MS der Gruppe beigetreten ist), müssen Sie`
stattdessen verwenden , um zu entkommen:/path/to/files/`{file1.ext,file2.ext,file3.ext`}
HINWEIS: Ich entschuldige mich im Voraus für die Beantwortung nur eines Teils der obigen Frage. Ich fand diese Befehle jedoch nützlich für meine aktuellen Unix-Anforderungen.
Hochladen bestimmter Dateien von einem lokalen Computer auf einen Remotecomputer:
~/Desktop/dump_files$ scp file1.txt file2.txt lab1.cpp etc.ext [email protected]:Folder1/DestinationFolderForFiles/
Hochladen eines gesamten Verzeichnisses von einem lokalen Computer auf einen Remotecomputer:
~$ scp -r Desktop/dump_files [email protected]:Folder1/DestinationFolderForFiles/
Herunterladen eines gesamten Verzeichnisses von einem Remotecomputer auf einen lokalen Computer:
~/Desktop$ scp -r [email protected]:Public/web/ Desktop/
quelle
In meinem Fall kann ich nur den Befehl sftp verwenden.
Also musste ich eine Batchdatei mit sftp verwenden. Ich habe ein Skript wie das folgende erstellt. 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 Kennworts anmelden können. Ändern Sie nach Bedarf.
quelle
Ihr Befehl funktioniert einwandfrei, aber ich möchte auch den Dateinamen ändern, während Sie lokal an remote senden. Ich habe einen Befehl geschrieben: - sshpass -p Passwort scp /path/to/file.txt root @ Hostname: /path/newfile.txt
Aber es gibt einen Fehler, dass /path/newfile.txt: Keine solche Datei oder Verzeichnis gefunden plz helfen mir in dieser Situation
quelle
hostname:/path/
tatsächlich vorhanden und zugänglich ist.scp verwendet ssh für die Datenübertragung mit derselben Authentifizierung und bietet dieselbe Sicherheit wie ssh.
Eine bewährte Methode ist hier die Implementierung von "SSH KEYS AND PUBLIC KEY AUTHENTICATION". Mit dieser Funktion können Sie Ihre Skripte schreiben, ohne sich um die Authentifizierung kümmern zu müssen. So einfach ist das.
Siehe WAS IST SSH-KEYGEN?
quelle
In dem speziellen Fall, in dem alle Dateien dieselbe Erweiterung haben, aber ein anderes Suffix haben (z. B. die Anzahl der Protokolldateien), verwenden Sie Folgendes:
Dadurch werden alle Dateien mit dem Namen some_log_file aus dem angegebenen Ordner auf der Remote-Datei kopiert, z. B. some_log_file.1, some_log_file.2, some_log_file.3 ....
quelle
quelle
-r
Option tun könnenscp
. Und Sie können andere Attribute (wie Zeitstempel) mit-p
Option beibehalten .