Wie bekomme ich ein gesamtes Verzeichnis in sftp?

433767
Matthew

Ich lerne gerade, SFTP zu verwenden, und ich 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 funktioniert auch nicht.

171
Rekursives Put / Get wurde in 5.4, das 2010 veröffentlicht wurde, zu OpenSSH hinzugefügt. Sie können ein Upgrade Ihrer Server in Betracht ziehen, da es auch viele Fehlerkorrekturen und bessere Sicherheitsfunktionen hinzufügt. Lèse majesté vor 12 Jahren 2

9 Antworten auf die Frage

242
mani-fresh

Verwenden Sie die -r(rekursive) Flagge:

get -r * 
Vielen Dank, dass Sie eine Antwort auf die Frage gestellt haben. jonnyflash vor 12 Jahren 15
Gibt mir: `get: Ungültige Flagge -r` ghbarratt vor 12 Jahren 28
Dies gibt mir auch ein ungültiges Flag. Ich bin nicht sicher, ob dies auf allen Systemen unterstützt wird. Ben vor 12 Jahren 2
@Ben: Als ich diese Frage im Jahr 2009 stellte, war die `-r`-Flagge nicht vorhanden. Ist Ihr System auf dem neuesten Stand? Matthew vor 11 Jahren 0
Es funktioniert auf allen gängigen Systemen. Habe es gerade getestet. buschtoens vor 11 Jahren 0
@silvinci nicht * alle * aktuellen Systeme. Unzulässige Option mit CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64 CrackerJack9 vor 11 Jahren 15
Aus irgendeinem Grund funktioniert das Hochladen von * rekursiv nicht mit `put -r *`, es können keine Verzeichnisse erstellt werden. Für mich hat die untenstehende LFTP-Lösung jedoch einwandfrei funktioniert. Ciantic vor 9 Jahren 0
Kennt jemand den Weg, um -r Verzeichnisse mit Schreibberechtigungen zu versehen? Jedes Mal, wenn ich -r für ein schreibgeschütztes Verzeichnis versuche, wird es nicht heruntergeladen, da das Verzeichnis lokal nur lesbar ist. Rahly vor 9 Jahren 0
Funktioniert nicht mit openssh-clients-5.3p1-111.el6.x86_64 auf 2.6.32-573.12.1.el6.x86_64 # 1 SMP Di 15.12.44.23 CST 2015 x86_64 x86_64 x86_64 GNU / Linux user637338 vor 8 Jahren 0
Genauer gesagt `mget -r ./*`, um alle Dateien und Ordner im aktuellen Verzeichnis abzurufen. funktioniert auch in MINGW64. https://kb.wisc.edu/cae/page.php?id=32991 SashikaXP vor 6 Jahren 0
52
Cristian Ciupitu

Benutzen:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents 
Das funktioniert, aber es wäre schön, wenn ich dies von SFTP aus machen könnte (damit ich sehen kann, was ich kopiere, bevor ich es kopiere). Ist das möglich? Matthew vor 15 Jahren 2
@Matthew: Das glaube ich nicht. Ich habe mir die gleiche Frage schon länger gestellt und die beste Antwort, die ich im Moment habe, ist "scp -r". Oder Sie könnten einen erweiterten SFTP-Client wie Filezilla verwenden. Cristian Ciupitu vor 15 Jahren 0
scp -r folgt Symlinks ... jsleuth vor 11 Jahren 1
Einige Systeme erlauben zwar einen 'sftp'-Zugriff, jedoch keinen' scp'-Zugriff. Turion vor 7 Jahren 2
39
bshanks

Use lftp:

lftp sftp://user@host 

Then, within lftp, cd into the directory you want to copy, and use the mirror command to recursively download the selected directory, like this:

mirror 

This command accepts options and arguments:

mirror [OPTIONS] [source [target]]

For example, the -R (or --reverse) option will cause it to upload the local directory tree to the remote directory:

mirror -R 

See the lftp(1) man page at the project’s site or at Debian.org for other commands and options.

+1 lftp ist wie ein kleines Bündel Magie und Freude! WCWedin vor 13 Jahren 4
15
Ryan Thompson

Verwenden Sie das SFTP-Programm nicht direkt, wenn Sie etwas Besseres finden. Unter Linux unterstützen viele Dateimanager (zumindest Nautilus und Dolphin, GNOME und KDE) sftp nativ und es gibt immer sshfs. Für Windows gibt es WinSCP und wahrscheinlich andere . Es geht darum, dass Sie über Sftp auf Dateien zugreifen können, als ob sie sich in einem regulären Dateisystem befänden, sodass Sie sich nicht darum kümmern müssen, 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 vor 15 Jahren 0
Ich hatte Leistungsprobleme mit Nautilus SFTP. Ja, es ist wirklich praktisch, aber ich konnte kein 1-Gbit / s-Netzwerk über Nautilus sättigen, während ich mit der einfachen Befehlszeilenschnittstelle `sftp / ssh` (ca. 100 MB / s-Dateiübertragungen) war. Das Problem war also Nautilus unter GNU / Linux Mint. stamster vor 6 Jahren 0
13
Ken Keenan

Versuchen Sie 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.

Mget funktioniert nicht besser als für mich zu bekommen. Matthew vor 15 Jahren 1
Getting Nicht reguläre Datei kann nicht heruntergeladen werden Dchris vor 9 Jahren 1
Dies funktionierte für mich auf einem System, bei dem 'get -r' nicht funktionierte. Tchotchke vor 8 Jahren 1
13
nwgat

Nun, diese kleine Anleitung sollte 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
  • use-pget-n = Anzahl der Segmente, wirklich 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 aus--parallel=8

Ich hoffe, das hilft jedem, der einen Remote-Ordner in einen lokalen Ordner spiegeln möchte

Danke, das hat für mich funktioniert, nachdem die anderen Methoden fehlgeschlagen sind (insbesondere keine "-r" -Option auf sftp). In meinem Fall musste der erste Teil des Befehls in Anführungszeichen gesetzt werden, da in dem Kennwort `lftp 'sftp: // user: pa$$word@server.org: 22' -e 'mirror --verbose - use-pget-n = 8 -c / remote / Pfad / lokal / Pfad "" Jason vor 10 Jahren 0
9
drkvogel
get -r [directory] 

gets [directory] and everything under it, where r stands for recursive. I found this just by typing help from sftp.

IMO Dies ist die beste Antwort auf diese Frage. :) ramrunner vor 11 Jahren 1
Dies ist ein Duplikat einer [answer] (http://superuser.com/a/216447/2357) vom * 29. November '10 * (vor fast eineinhalb Jahren). Cristian Ciupitu vor 10 Jahren 3
4
Aziraphale

Wie bei cp:

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

Auf diese Weise werden die Zeiten und Modi der Originaldateien und -Unterverzeichnisse beibehalten. Dies ist besonders nützlich für das Abrufen von Sicherungen.

Dies ist im Grunde ein Duplikat einer [Antwort] (http://superuser.com/a/216447/2357) vom * 29. November '10 * (vor fast zwei Jahren). Cristian Ciupitu vor 10 Jahren 0
0
YumYumYum

Ich habe Java Dist-Ordner auf Remote-Server, wo ich folgenden Baum habe:

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

Ziel ist: Ich möchte SFTP verwenden? Und lege 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