Come posso ottenere un'intera directory in sftp?


189

Sto solo imparando a usare sftp e voglio copiare una directory dal computer remoto al mio computer locale. Se ci provo

get [directory]

mi dà questo errore:

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

get -R non funziona neanche.


2
Put / get ricorsivo è stato aggiunto a OpenSSH in 5.4, che è stato rilasciato nel 2010. Puoi prendere in considerazione l'aggiornamento dei tuoi server in quanto aggiunge anche molte correzioni di bug e migliori funzionalità di sicurezza.
Lèse majesté,

Risposte:


266

Usa il -rflag (ricorsivo):

get -r *

16
Grazie per aver fornito una risposta che risponde effettivamente alla domanda.
Jonnyflash,

30
Mi dà:get: Invalid flag -r
ghbarratt il

2
Questo mi dà anche un flag non valido. Non sono sicuro che questo sia supportato su tutti i sistemi.
Ben

@Ben: quando ho fatto questa domanda nel 2009, la -rbandiera non esisteva. Il tuo sistema è aggiornato?
Matteo,

15
@silvinci non tutti i sistemi attuali. Opzione illegale con CentOS 6.4 openssh-client-5.3p1-84.1.el6.x86_64
CrackerJack9

52

Uso:

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

3
Funziona, ma sarebbe bello poterlo fare da SFTP (così posso vedere cosa copio prima di copiarlo). È possibile?
Matteo,

@Matthew: Non la penso così. Mi sto ponendo la stessa domanda da qualche tempo e la migliore risposta che ho per il momento è scp -r. Oppure potresti usare un client SFTP avanzato come Filezilla.
Cristian Ciupitu,

1
scp -r seguirà i symlink ...
jsleuth,

5
Alcuni sistemi possono consentire sftp, ma non scpaccedere.
Turion,

40

Utilizzare lftp:

lftp sftp://user@host

Quindi, all'interno di lftp, cdnella directory che si desidera copiare e utilizzare il mirrorcomando per scaricare ricorsivamente la directory selezionata, in questo modo:

mirror

Questo comando accetta opzioni e argomenti:

mirror [ OPTIONS ] [ fonte [ target ]]

Ad esempio, l' opzione -R(o --reverse) causerà il caricamento dell'albero della directory locale nella directory remota:

mirror -R

Vedi la lftp(1)pagina man sul sito del progetto o su Debian.org per altri comandi e opzioni.


4
+1 lftp è come un piccolo fascio di magia e gioia!
WCWedin

16

bene questa piccola guida dovrebbe aiutare, rispecchiare un server remoto nella cartella locale con lftp

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

  • sftp:// = utilizza il protocollo SFTP
  • mirror = modalità specchio
  • verbose = mostra i file da scaricare
  • use-pget-n = numero di segmenti, davvero utile per velocizzare file di grandi dimensioni
  • parallel = scarica contemporaneamente i file moltiplicatori

se si desidera scaricare file in parallelo, uscire use-pget-n=8con--parallel=8

spero che questo aiuti chiunque abbia bisogno di eseguire il mirroring di una cartella remota su una cartella locale


Grazie, questo ha funzionato per me, dopo che gli altri metodi hanno fallito (in particolare nessuna opzione "-r" su sftp). La prima parte del comando nel mio caso doveva essere citata, a causa dei caratteri in dollari nella passwordlftp 'sftp://user:pa$$word@server.org:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason

15

Non usare direttamente il programma sftp se riesci a trovare qualcosa di meglio. Per Linux, molti file manager (almeno Nautilus e Dolphin, quelli GNOME e KDE) supportano nativamente sftp e ci sono sempre sshfs. Per Windows, c'è WinSCP e probabilmente altri . Il punto di tutto ciò è di permetterti di accedere ai file su sftp come se fossero su un normale file system, quindi non devi preoccuparti di accedervi tramite sftp.


Wow, nautilus funziona molto bene con SFTP. Ho aggiunto un segnalibro in Nautilus e ora è tutto incredibilmente facile. Grazie!
Matteo,

Ho avuto problemi di prestazioni con Nautilus SFTP. Sì, è davvero conveniente ma non sono stato in grado di saturare la rete da 1 Gbit / s tramite Nautilus, mentre con la semplice sftp/sshinterfaccia a riga di comando ero (cca 100 MB / s trasferimenti di file). Quindi il problema era Nautilus su GNU / Linux Mint.
Criceto

13

Prova mgetinvece di get.

Chiarimento: mget vi funziona se si è all'interno della directory che si desidera copiare; se fai qualcosa del genere:

sftp> cd dir_to_get
sftp> mget *

otterrà tutti i file in quella directory. Tuttavia, sarà non ricorsivo ottenere il contenuto di eventuali sottodirectory.


1
mget non funziona meglio di quanto ottenga per me.
Matteo,

1
ottenere Impossibile scaricare file non regolari con questo
Dchris

1
Questo ha funzionato per me su un sistema in cui 'get -r' non funzionava.
Tchotchke,

10
get -r [directory]

ottiene [directory]e tutto sotto di esso, dove rrappresenta ricorsivo. Ho trovato questo semplicemente digitando helpda sftp.


1
IMO questa è la migliore risposta a questa domanda. :)
Ramrunner,

3
Questo è un duplicato di una risposta del 29 novembre 10 (quasi un anno e mezzo fa).
Cristian Ciupitu,

5

Come con cp:

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

Quanto sopra conserverà i tempi e le modalità dei file e delle sottodirectory originali. Ciò è particolarmente utile per il recupero dei backup.


Questo è fondamentalmente un duplicato di una risposta del 29 novembre 10 (quasi due anni fa).
Cristian Ciupitu,

0

Ho una cartella dist Java nel server remoto, dove ho il seguente albero:

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

L'obiettivo è: voglio usare SFTP? E inseriscili in / tmp / <>

Passaggio 1. sftp remoteuser @ ip

Passaggio 2. cd / var / tmp

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

Passaggio 3. lcd / tmp / dist

Passaggio 4. mget *

Passaggio 5. lcd / tmp / dist / lib

Passaggio 6. mget *

Passo 7. finalmente ho il mio obiettivo

$ ls
Audio.jar  lib  README.TXT
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.