Como obtenho um diretório inteiro no sftp?

189

Estou apenas aprendendo a usar o sftp e quero copiar um diretório do computador remoto para o meu computador local. Se eu tentar

get [directory]

isso me dá este erro:

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

get -R também não funciona.

Mateus
fonte
2
O put / get recursivo foi adicionado ao OpenSSH na versão 5.4, lançado em 2010. Você pode considerar atualizar seus servidores, pois também adiciona muitas correções de bugs e melhores recursos de segurança.
Lèse majesté

Respostas:

266

Use o -rsinalizador (recursivo):

get -r *
mani-fresh
fonte
16
Obrigado por colocar uma resposta que realmente responda à pergunta.
precisa saber é o seguinte
30
Dá-me:get: Invalid flag -r
ghbarratt 18/07/2012
2
Isso também me dá sinalizador inválido. Não tenho certeza se isso é suportado em todos os sistemas.
Ben
@ Ben: Quando eu fiz essa pergunta em 2009, a -rbandeira não existia. O seu sistema está atualizado?
Matthew
15
@silvinci nem todos os sistemas atuais. Opção ilegal com CentOS 6.4 openssh-clients-5.3p1-84.1.el6.x86_64
CrackerJack9
52

Usar:

scp -r mpirocch@my-server:/home/mpirocch/Documents Documents
Cristian Ciupitu
fonte
3
Isso funciona, mas seria bom poder fazer isso no SFTP (para que eu possa ver o que copio antes de copiá-lo). Isso é possível?
Matthew Matthew
@ Matthew: Eu acho que não. Estou me perguntando a mesma pergunta há algum tempo e a melhor resposta que tenho no momento é scp -r. Ou você pode usar um cliente SFTP avançado como o Filezilla.
Cristian Ciupitu 12/09/09
1
scp -r vai seguir os links ...
jsleuth
5
Alguns sistemas podem permitir sftp, mas não scpacessar.
Turion
40

Use lftp:

lftp sftp://user@host

Em seguida, no lftp, cdno diretório que você deseja copiar e use o mirrorcomando para baixar recursivamente o diretório selecionado, assim:

mirror

Este comando aceita opções e argumentos:

espelho [ OPÇÕES ] [ origem [ destino ]]

Por exemplo, a opção -R(ou --reverse) fará o upload da árvore de diretórios local para o diretório remoto:

mirror -R

Veja a lftp(1)página de manual no site do projeto ou no Debian.org para outros comandos e opções.

bshanks
fonte
4
+1 lftp é como um pequeno pacote de magia e alegria!
precisa saber é o seguinte
16

bem, este pequeno guia deve ajudar, espelhar um servidor remoto na pasta local com o lftp

lftp sftp://user:[email protected]:22 -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'

  • sftp:// = usa protocolo SFTP
  • mirror = modo espelho
  • verbose = mostra os arquivos que estão sendo baixados
  • use-pget-n = número de segmentos, muito útil para acelerar arquivos grandes
  • parallel = baixa arquivos multiplicadores ao mesmo tempo

Se você deseja baixar arquivos em paralelo, alterne use-pget-n=8com--parallel=8

espero que isso ajude qualquer pessoa que precise espelhar uma pasta remota para uma pasta local

nwgat
fonte
Obrigado, isso funcionou para mim, depois que os outros métodos falharam (em particular nenhuma opção "-r" no sftp). A primeira parte do comando, no meu caso, precisava ser citada, devido a caracteres em dólar na senha.lftp 'sftp://user:[email protected]:22' -e 'mirror --verbose --use-pget-n=8 -c /remote/path /local/path'
Jason
15

Não use o programa sftp diretamente se puder encontrar algo melhor. Para Linux, muitos gerenciadores de arquivos (pelo menos Nautilus e Dolphin, GNOME e KDE) suportam o sftp nativamente, e sempre há sshfs. Para o Windows, há o WinSCP e provavelmente outros . O objetivo de tudo isso é permitir que você acesse arquivos pelo sftp como se estivessem em um sistema de arquivos normal, para que você não precise se preocupar em acessá-los pelo sftp.

Ryan Thompson
fonte
Uau, o nautilus funciona muito bem com o SFTP. Adicionei um marcador no Nautilus, e agora tudo é ridiculamente fácil. Obrigado!
Matthew Matthew
Eu tive um problema de desempenho com o Nautilus SFTP. Sim, é realmente conveniente, mas não consegui saturar a rede de 1 Gbit / s via Nautilus, enquanto sftp/ssheu estava com uma interface simples de linha de comando (transferências de arquivos de cerca de 100 MB / s). Portanto, o problema era o Nautilus no GNU / Linux Mint.
Stamster
13

Tente em mgetvez de get.

Esclarecimento: mget vai funcionar se você está dentro do diretório que você deseja copiar; se você fizer algo assim:

sftp> cd dir_to_get
sftp> mget *

ele receberá todos os arquivos nesse diretório. No entanto, ele não obterá recursivamente o conteúdo de nenhum subdiretório.

Ken Keenan
fonte
1
O mget não funciona melhor do que para mim.
Matthew Matthew
1
ficando Não é possível baixar arquivo não regular com este
Dchris
1
Isso funcionou para mim em um sistema em que 'get -r' não funcionou.
Tchotchke
10
get -r [directory]

fica [directory]e tudo sob ele, onde rsignifica recursivo. Achei isso apenas digitando helpa partir sftp.

drkvogel
fonte
1
IMO, esta é a melhor resposta para esta pergunta. :)
ramrunner
3
Esta é uma duplicata da resposta de 29 de novembro de 2010 (quase um ano e meio atrás).
Cristian Ciupitu
5

Tal como acontece com cp:

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

O acima preservará os horários e modos dos arquivos e subdiretórios originais. Isso é especialmente útil para a recuperação de backups.

Aziraphale
fonte
Esta é basicamente uma duplicata de uma resposta de 29 de novembro de 2010 (quase dois anos atrás).
Cristian Ciupitu
0

Eu tenho a pasta Java dist no servidor remoto, onde tenho a seguinte árvore:

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

O objetivo é: eu quero usar o SFTP? E coloque-os em / tmp / <>

Etapa 1. sftp remoteuser @ ip

Etapa 2. cd / var / tmp

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

Etapa 3. lcd / tmp / dist

Etapa 4. mget *

Etapa 5. lcd / tmp / dist / lib

Etapa 6. mget *

Passo 7. finalmente eu tenho meu objetivo

$ ls
Audio.jar  lib  README.TXT
YumYumYum
fonte