Frage Kann scp Verzeichnisse rekursiv kopieren?


Momentan kann ich nur einen einzigen kopieren .tar Datei. Aber wie kann ich Verzeichnisse rekursiv mit kopieren scp?


518
2018-04-29 04:24


Ursprung




Antworten:


Yup, benutzen -r:

scp -rp sourcedirectory user@dest:/path
  • -r bedeutet rekursiv
  • -p behält Änderungszeiten, Zugriffszeiten und Modi aus der Originaldatei bei.

Hinweis: Dies erstellt die sourcedirectory Innerhalb /path damit sind die Dateien drin /path/sourcedirectory


838
2018-04-29 04:28



Bedenken Sie jedoch, dass Symlinks dadurch nicht erhalten bleiben. - CpnCrunch
Beachten Sie, dass -pr (Optionen in umgekehrter Reihenfolge) kopiert nicht die Ordner, sondern ihren Inhalt in das Zielverzeichnis (anscheinend ist die Reihenfolge der Optionen wichtig). - pms
Aus irgendeinem Grund /path scheint relativ zu sein users $HOME - Wie mache ich es absolut, ohne zu sein root@? - Jonathan
Ja, SCP lässt die Dateien nie wo ich will. Wenn ich versuche, ein Verzeichnis zu ersetzen, stehe ich oft auf einem anderen Verzeichnis mit demselben Namen. Ich bin besonders vorsichtig damit. - sudo


Während die vorherigen Antworten technisch korrekt sind, sollten Sie auch in Betracht ziehen rsync stattdessen. rsync vergleicht die Daten auf der sendenden und der empfangenden Seite mit einem diff-Mechanismus, so dass Daten, die bereits gesendet wurden, nicht erneut gesendet werden müssen.

Wenn Sie mehr als einmal etwas auf einen Remote-Computer kopieren möchten, verwenden Sie rsync. Eigentlich ist es gut zu benutzen rsync Jedes Mal, weil es mehr Steuerelemente für das Kopieren von Dateiberechtigungen und Eigentumsrechten sowie das Ausschließen bestimmter Dateien oder Verzeichnisse enthält. Im Algemeinen:

$ rsync -av /local/dir/ server:/remote/dir/

synchronisiert ein lokales Verzeichnis mit einem entfernten Verzeichnis. Wenn Sie es ein zweites Mal ausführen und der Inhalt des lokalen Verzeichnisses sich nicht geändert hat, werden keine Daten übertragen - viel effizienter als das Ausführen scp und kopiere alles jedes Mal.

Ebenfalls, rsync ermöglicht es Ihnen, im Gegensatz zu unterbrochenen Übertragungen sehr leicht zu erholen scp.

Endlich, moderne Versionen von rsync standardmäßig über ssh laufen, also wenn scp funktioniert schon, rsync sollte eigentlich ein Drop-In-Ersatz sein.


149
2018-04-29 05:11



"Es werden keine Daten übertragen", außer natürlich die Daten, die benötigt werden, um genau zu bestimmen, was sich geändert hat oder nicht. - thsutton
Ha ja, das habe ich offensichtlich etwas übertrieben. Wir sprechen hier nicht über Quantenverschränkung. - Phil Hollenback
Es ist so traurig, dass osx, win7 und nicht einmal ubuntu für ihre GUI noch so etwas wie rsync verwenden. - cregox
Dmourati Ich habe seine Frage beantwortet. Ich sagte ihm einen besseren Weg. - Phil Hollenback
@raphnguyen: Nein, das Löschen von Dateien aus dem lokalen Verzeichnis löscht sie nicht aus dem Remote-Verzeichnis. Sie können dieses Verhalten mit aktivieren --delete rsync-Option. - Phil Hollenback


Das ist es, was -r Option ist für. :)

Siehe die scp man Seite Für weitere Informationen, wenn nötig.


30
2018-04-29 04:27





Rekursive Kopieroption '-r' (Kleinschreibung)

scp -r

Was ich mit der regulären lokalen rekursiven Kopieroption '-R' (Großschreibung) verwechsle

cp -R

9
2017-09-11 17:53



Ich wollte nur auf den Unterschied zwischen cp und scp hinweisen, da -r und -R nicht gleich sind. unix.stackexchange.com/questions/18712/... - Tarun


Der beste Weg ist, rsync über SSH zu verwenden

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

Meine Lieblingsoptionen sind -Pazvessh --delete:

  • -a: Archivierungsmodus (enthält viele Standard-Standardoptionen, einschließlich der Beibehaltung von Symlinks)
  • -z: komprimieren
  • -v: Ausführlich: Dateien anzeigen
  • -P: Zeige Fortschritt als Dateien fertig / verbleibende Dateien
  • -e ssh: Führe rsync im SSH-Protokoll aus
  • --Löschen: Dateien im Ziel löschen, die sich nicht mehr in der Quelle befinden

4
2017-11-05 18:33



Alle Versionen von rsync das ich benutzt habe würde verwenden ssh standardmäßig, so -essh wird wahrscheinlich nicht benötigt. Und die Wahl des Befehls, der zum Herstellen einer Verbindung mit dem entfernten Host verwendet wird, steht in keinem Zusammenhang mit dem rekursiven Kopieren. - kasperd


Nachdem ich nach dem rekursiven Kopierflag gesucht habe und es dank dieses Beitrags erfolgreich genutzt habe, möchte ich nur einen Vorschlag posten.

In diesem Fall kopieren Sie (rekursiv) ein Verzeichnis. Vielleicht, wenn die Dateien komprimiert gesendet werden, können Sie 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


3
2018-06-06 18:00



die Dateierweiterung sollte entweder sein .tar.gz oder .tgz da die Datei ein gezipptes tar - Archiv ist (seit dem -z Flagge wird verwendet). - anthonybell


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

Zum Beispiel, um Inhalte von zu kopieren /var/log von domain.com zu ~/logs.tgz Sie laufen:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

Sie können Dateien auch auf dem Zielsystem mithilfe von Pipes extrahieren. Dieser Befehl kopiert den Inhalt von /var/log beim domain.com zu ~/destination/log auf deinem System:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

Obwohl ein Verzeichnis zu spiegeln, sollten Sie wahrscheinlich verwenden rsync...


1
2018-01-06 07:20