it-swarm.com.de

Kann scp Verzeichnisse rekursiv kopieren?

Derzeit kann ich nur eine einzige .tar - Datei kopieren. Aber wie kann ich Verzeichnisse mit scp rekursiv kopieren?

610
kernel

Ja, benutze -r:

scp -rp sourcedirectory [email protected]:/path
  • -r bedeutet rekursiv
  • -p behält Änderungszeiten, Zugriffszeiten und Modi aus der Originaldatei bei.

Hinweis: Dadurch wird das sourcedirectory in /path somit befinden sich die Dateien in /path/sourcedirectory

981
dmourati

Während die vorherigen Antworten technisch korrekt sind, sollten Sie stattdessen auch rsync verwenden. rsync vergleicht die Daten auf der sendenden und der empfangenden Seite mit einem Diff-Mechanismus, sodass Daten, die bereits zuvor gesendet wurden, nicht erneut gesendet werden müssen.

Wenn Sie etwas mehrmals auf einen Remotecomputer kopieren möchten, verwenden Sie rsync. Tatsächlich ist es gut, rsync jedes Mal zu verwenden, da es mehr Steuerelemente zum Kopieren von Dateiberechtigungen und -eigentum sowie zum Ausschließen bestimmter Dateien oder Verzeichnisse enthält. Allgemein:

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

synchronisiert ein lokales Verzeichnis mit einem Remote-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 auszuführen und jedes Mal alles zu kopieren.

Außerdem können Sie mit rsync im Gegensatz zu scp sehr einfach von unterbrochenen Übertragungen wiederherstellen.

Schließlich laufen moderne Versionen von rsync standardmäßig über ssh. Wenn also scp bereits funktioniert, sollte rsync so ziemlich ein Ersatz sein.

177
Phil Hollenback

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

Weitere Informationen finden Sie in der scp-Manpage , falls erforderlich.

34
HedgeMage

Rekursive Kopieroption '-r' (Kleinbuchstaben)

scp -r

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

cp -R
12
Tarun

Der beste Weg ist, rsync über SSH zu verwenden

rsync -a -essh /source/ [email protected]:/dest/

rsync -a -essh [email protected]:/source/ /dest/

Meine Lieblingsoptionen sind -Pazvessh --delete:

  • -a: Archivierungsmodus (enthält viele allgemeine Standardoptionen, einschließlich der Beibehaltung von Symlinks)
  • -z: komprimieren
  • -v: verbose: Dateien anzeigen
  • -P: Zeige progess als erledigte Dateien/verbleibende Dateien
  • -e ssh: rsync im ssh-Protokoll
  • --delete: Löscht Dateien im Ziel, die sich nicht mehr in der Quelle befinden
7
mick

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

Wenn Sie ein Verzeichnis (rekursiv) kopieren. Wenn die Dateien komprimiert gesendet werden, können Sie möglicherweise Zeit bei der Übertragung sparen

Was ich am Ende getan habe war:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz

Hoffe das hilft

4
user9869932

Mit diesem einfachen Befehl können Sie ein Verzeichnis rekursiv in ein komprimiertes Archiv kopieren:

ssh -p 22 [email protected]  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

Um beispielsweise den Inhalt von /var/log Von domain.com Nach ~/logs.tgz Zu kopieren, führen Sie Folgendes aus:

ssh -p 22 [email protected]  '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 Unter domain.com Nach ~/destination/log Auf Ihrem System:

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

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

2
Anubioz

Wenn Sie das Kennwort des Benutzers lieber als Parameter übergeben möchten, als es interaktiv einzugeben, können Sie sshpass (Sudo apt-get install -y sshpass).

Beispiel:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1

Sie können die Option -r mit dem Befehl scp verwenden, um Verzeichnisse auf jedem System rekursiv zu kopieren. Wenn Sie noch etwas benötigen, lesen Sie Tutorial zum Befehl scp . Die Option -r steht für rekursiven Betrieb in den meisten Linux-Befehlen.

0
atthik