Wie bekomme ich ein gesamtes Verzeichnis in sftp?


191

Ich lerne gerade sftp und möchte ein Verzeichnis vom Remote-Computer auf meinen lokalen Computer kopieren. Wenn ich es versuche

get [directory]

es gibt mir diesen Fehler:

Cannot download non-regular file: /home/mpirocch/Documents

get -R geht auch nicht


2
Rekursives Put / Get wurde OpenSSH in 5.4 hinzugefügt, das im Jahr 2010 veröffentlicht wurde. Sie können ein Upgrade Ihrer Server in Betracht ziehen, da es auch viele Fehlerkorrekturen und bessere Sicherheitsfunktionen hinzufügt.
Majestätsbeleidigung

Antworten:


268

Verwende das -r(rekursive) Flag:

get -r *

16
Vielen Dank, dass Sie eine Antwort gegeben haben, die die Frage tatsächlich beantwortet.
Jonnyflash

30
Gibt mir:get: Invalid flag -r
Ghbarratt

2
Dies gibt mir auch eine ungültige Flagge. Ich bin nicht sicher, ob dies auf allen Systemen unterstützt wird.
Ben

@ Ben: Als ich diese Frage im Jahr 2009 stellte, existierte die -rFlagge nicht. Ist Ihr System auf dem neuesten Stand?
Matthew

15
@silvinci nicht alle aktuellen Systeme. Unzulässige Option mit CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64
CrackerJack9

52

Verwenden:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents

3
Dies funktioniert, aber es wäre schön, dies über SFTP tun zu können (damit ich sehen kann, was ich kopiere, bevor ich es kopiere). Ist das möglich?
Matthew

@ Matthew: Ich glaube nicht. Ich stelle mir seit einiger Zeit die gleiche Frage und die beste Antwort, die ich im Moment habe, ist scp -r. Oder Sie können einen erweiterten SFTP-Client wie Filezilla verwenden.
Cristian Ciupitu

1
scp -r wird Symlinks folgen ...
Jsleuth

5
Einige Systeme erlauben möglicherweise sftp, aber keinen scpZugriff.
Turion

40

Verwendung lftp:

lftp sftp://user@host

Gehen cdSie dann in lftp in das Verzeichnis, das Sie kopieren möchten, und verwenden Sie den mirrorBefehl, um das ausgewählte Verzeichnis wie folgt rekursiv herunterzuladen:

mirror

Dieser Befehl akzeptiert Optionen und Argumente:

Spiegeln [ OPTIONEN ] [ Quelle [ Ziel ]]

Zum Beispiel bewirkt die Option -R(oder --reverse), dass der lokale Verzeichnisbaum in das Remote-Verzeichnis hochgeladen wird:

mirror -R

Weitere Befehle und Optionen finden Sie auf der lftp(1)Manpage auf der Website des Projekts oder unter Debian.org .


4
+1 LFTP ist wie ein kleines Bündel von Magie und Freude!
WCWedin

16

Nun, diese kleine Anleitung soll helfen, einen Remote-Server in einen lokalen Ordner mit LFTP zu spiegeln

lftp sftp://user:password@server.org:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = verwendet das SFTP-Protokoll
  • mirror = Spiegelmodus
  • verbose = zeigt die heruntergeladenen Dateien an
  • use-pget-n = Anzahl der Segmente, sehr nützlich, um große Dateien zu beschleunigen
  • parallel = Lädt Multiplikator-Dateien gleichzeitig herunter

Wenn Sie Dateien parallel herunterladen möchten, wechseln Sie use-pget-n=8mit--parallel=8

Ich hoffe, dies hilft jedem, der einen Remote-Ordner in einen lokalen Ordner spiegeln muss


Danke, das hat bei mir geklappt, nachdem die anderen Methoden fehlgeschlagen sind (insbesondere keine "-r" -Option auf sftp). Der erste Teil des Befehls musste in meinem Fall aufgrund von Dollarzeichen im Kennwort in Anführungszeichen gesetzt werdenlftp 'sftp://user:pa$$word@server.org:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason,

15

Verwenden Sie das sftp-Programm nicht direkt, wenn Sie etwas Besseres finden können. Unter Linux unterstützen viele Dateimanager (mindestens Nautilus und Dolphin, GNOME und KDE) sftp nativ, und es gibt immer sshfs. Für Windows gibt es WinSCP und wahrscheinlich auch andere . Der Sinn all dieser Funktionen ist, dass Sie über SFTP auf Dateien zugreifen können, als befänden Sie sich in einem regulären Dateisystem. Sie müssen sich also nicht darum kümmern, dass Sie über SFTP auf sie zugreifen.


Wow, Nautilus funktioniert sehr gut mit SFTP. Ich habe ein Lesezeichen in Nautilus hinzugefügt, und jetzt ist alles lächerlich einfach. Vielen Dank!
Matthew

Ich hatte Leistungsprobleme mit Nautilus SFTP. Ja, es ist sehr praktisch, aber ich konnte kein 1-Gbit / s-Netzwerk über Nautilus sftp/sshauslasten , während ich es mit einer einfachen Befehlszeilenschnittstelle tat (ca. 100 MB / s Dateitransfer). Das Problem war also Nautilus unter GNU / Linux Mint.
Stempel

13

Versuchen Sie es mgetstatt get.

Erläuterung: Funktioniert mget , wenn Sie sich in dem Verzeichnis befinden, das Sie kopieren möchten. wenn du so etwas machst:

sftp> cd dir_to_get
sftp> mget *

Es werden alle Dateien in diesem Verzeichnis abgerufen. Der Inhalt von Unterverzeichnissen wird jedoch nicht rekursiv abgerufen.


1
mget funktioniert nicht besser als für mich.
Matthew

1
getting Kann nicht-reguläre Datei mit diesem herunterladen
Dchris

1
Dies funktionierte für mich auf einem System, auf dem 'get -r' nicht funktionierte.
Tchotchke

10
get -r [directory]

bekommt [directory]und alles drunter, wo rrekursiv steht. Ich fand das nur durch Tippen helpvon sftp.


1
IMO das ist die beste Antwort auf diese Frage. :)
Ramrunner

3
Dies ist ein Duplikat einer Antwort vom 29. November 10 (vor fast eineinhalb Jahren).
Cristian Ciupitu

5

Wie bei cp:

scp -rp user@host:/path/to/dir dir

Das Obige behält die Zeiten und Modi der ursprünglichen Dateien und Unterverzeichnisse bei. Dies ist besonders nützlich für das Abrufen von Backups.


Dies ist im Grunde ein Duplikat einer Antwort vom 29. November 10 (vor fast zwei Jahren).
Cristian Ciupitu

0

Ich habe Java dist Ordner im Remote-Server, wo ich folgenden Baum habe:

- dist
--- Audio.jar
--- README
--- lib
----- lib.jar

Ziel ist: Ich möchte SFTP nutzen? Und legen Sie sie in / tmp / <>

Schritt 1. sftp remoteuser @ ip

Schritt 2. cd / var / tmp

Schritt 2. lmkdir / tmp / dist; lmkdir / tmp / dist / lib

Schritt 3. lcd / tmp / dist

Schritt 4. mget *

Schritt 5. lcd / tmp / dist / lib

Schritt 6. mget *

Schritt 7. Endlich habe ich mein Ziel

$ ls
Audio.jar  lib  README.TXT
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.