Antworten:
Ja, benutze -r
:
scp -rp sourcedirectory user@dest:/path
Hinweis: Dadurch wird das sourcedirectory
Innere erstellt, in dem sich /path
die Dateien befinden/path/sourcedirectory
-pr
(Optionen in umgekehrter Reihenfolge) die Ordner nicht kopieren, sondern ihren Inhalt in das Zielverzeichnis kopieren (anscheinend ist die Reihenfolge der Optionen von Bedeutung).
Obwohl die vorherigen Antworten technisch korrekt sind, sollten Sie rsync
stattdessen auch die Verwendung in Betracht ziehen . rsync
vergleicht die Daten auf der Sende- und Empfangsseite mit einem Diff-Mechanismus, damit bereits gesendete Daten nicht erneut gesendet werden müssen.
Wenn Sie etwas mehr als einmal auf einen Remote-Computer kopieren möchten, verwenden Sie rsync
. Eigentlich ist es gut, rsync
jedes Mal zu verwenden, da es mehr Steuerelemente zum Kopieren von Dateiberechtigungen und -besitz sowie zum Ausschließen bestimmter Dateien oder Verzeichnisse enthält. Im Allgemeinen:
$ rsync -av /local/dir/ server:/remote/dir/
synchronisiert ein lokales Verzeichnis mit einem entfernten Verzeichnis. Wenn Sie es ein zweites Mal ausführen und sich der Inhalt des lokalen Verzeichnisses nicht geändert hat, werden keine Daten übertragen - viel effizienter als scp
jedes Mal alles auszuführen und zu kopieren.
Außerdem rsync
können Sie sich im Gegensatz zu unterbrochenen Übertragungen sehr leicht erholen scp
.
Schließlich werden moderne Versionen rsync
von standardmäßig über ssh ausgeführt. Wenn dies scp
also bereits funktioniert, rsync
sollte dies praktisch ein Ersatz sein.
rsync
ist effizienter. Eine Sache, die es derzeit nicht scp
tut, ist das Kopieren zwischen entfernten Hosts (zumindest ohne den rsync-Client auf einem von ihnen auszuführen).
-av
: v steht für ausführlich, a für archiv und ist eine Verknüpfung zu -rlptgoD, die rekursiv impliziert, dass die Daten und Links der Rechteinhaber erhalten bleiben. Wenn Sie nur rekursiv verwenden möchten-r
Dafür gibt es die -r
Option. :)
Weitere Informationen finden Sie bei Bedarf auf der scp-Manpage .
Rekursive Kopieroption '-r' (Kleinbuchstaben)
scp -r
Was ich mit der regulären lokalen rekursiven Kopieroption '-R' verwechsle (Großbuchstaben)
cp -R
Am besten verwenden Sie rsync über SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Meine Lieblingsoptionen sind -Pazvessh --delete:
rsync
, die ich verwendet habe, würden ssh
standardmäßig verwendet, daher -essh
ist es unwahrscheinlich, dass sie benötigt werden. Und die Wahl des Befehls, der zum Herstellen einer Verbindung zum Remote-Host verwendet wird, hat nichts mit dem rekursiven Kopieren zu tun.
Nachdem ich nach dem rekursiven Kopier-Flag gesucht und es dank dieses Posts erfolgreich verwendet habe, möchte ich nur einen Vorschlag posten.
In diesem Fall kopieren Sie (rekursiv) ein Verzeichnis. Wenn die Dateien komprimiert gesendet werden, können Sie möglicherweise Zeit bei der Übertragung sparen
Was ich am Ende gemacht habe war:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Hoffe das hilft
.tar.gz
oder sein, .tgz
da die Datei ein gezipptes Tar-Archiv ist (da das -z
Flag verwendet wird).
Mit diesem einfachen Befehl können Sie ein Verzeichnis rekursiv in ein komprimiertes Archiv kopieren:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Um beispielsweise Inhalte von /var/log
von domain.com
zu kopieren , führen ~/logs.tgz
Sie Folgendes aus:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
Sie können Dateien auf dem Zielsystem auch mithilfe von Pipes extrahieren. Dieser Befehl kopiert den Inhalt von /var/log
at domain.com
to ~/destination/log
auf Ihr System:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Um ein Verzeichnis zu spiegeln, sollten Sie wahrscheinlich rsync
...
Wenn Sie es vorziehen, das Kennwort des Benutzers als Parameter zu übergeben, anstatt es interaktiv einzugeben, können Sie sshpass
( sudo apt-get install -y sshpass
) verwenden.
Beispiel:
sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder
Sie können die Option -r mit dem Befehl scp verwenden, um Verzeichnisse auf einem beliebigen System rekursiv zu kopieren. Wenn Sie weitere Informationen benötigen, lesen Sie das Tutorial zum Befehl scp . Die Option -r steht für eine rekursive Operation in den meisten Linux-Befehlen.
-r
Option wurde zwar schon vor Jahren vorgeschlagen und ist die akzeptierte Antwort.
Eine andere (wahrscheinlich bessere für die wiederholte Verwendung) Option ist die Verwendung von NFS. Schauen Sie sich den NFS-Kernel-Server an und erfahren Sie, wie Sie NFS-Freigaben einrichten.
scp
NFS verwenden würden , dies ist jedoch keine Option.