Como baixar recursivamente uma pasta via FTP no Linux [fechado]


325

Estou tentando ftp uma pasta usando o cliente ftp da linha de comando, mas até agora só consegui usar 'get' para obter arquivos individuais.


5
a resposta certa é 6 de abril de 2011 às 14:13 por lkuty. Não use mget, não é recursivo. resposta de 22/09/08 às 09:01 Thibaut Barrère é mais fácil de entender, mas deve adicionar a opção -l 0conforme mencionado nos comentários
chriscatfr 11/11/12

Respostas:


635

Você pode confiar no wget, que geralmente lida com o ftp get corretamente (pelo menos na minha própria experiência). Por exemplo:

wget -r ftp://user:pass@server.com/

Você também pode usar o -mque é adequado para espelhamento. Atualmente é equivalente a -r -N -l inf.

Se você tiver alguns caracteres especiais nos detalhes da credencial, poderá especificar os argumentos --usere --passwordpara fazê-lo funcionar. Exemplo com login personalizado com caracteres específicos:

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

EDIT Conforme apontado por @asmaier, observe que, mesmo que -rseja para recursão, ele possui um nível máximo padrão de 5:

       -r
       --recursive
           Turn on recursive retrieving.

       -l depth
       --level=depth
           Specify recursion maximum depth level depth.  The default maximum depth is 5.

Se você não deseja perder subdiretórios, use melhor a opção de espelhamento -m:

       -m
       --mirror
           Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets infinite
           recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l inf
           --no-remove-listing.

121
Melhor uso wget -m( --mirror). wget -ré limitado a uma profundidade de recursão de 5 por padrão.
Asmaier 7/07

13
Eu tive que usar --usere --passwordtambém no Red Hat. Meu wget é: GNU Wget 1.11.4 Red Hat modifiedGostaria de saber se é uma coisa versão ou uma coisa distro ...
Devin

61
Você pode definir o nível de recursividade infinita com -l 0, então não há necessidade de usar --mirrorque pode ter alguns efeitos colaterais indesejáveis, tais como .listing arquivos
Hnatt

28
Eu uso wget --ask-password -rl 99 ftp://user@server.com. Dessa forma, a senha não é visível pse não permanece no histórico. Obviamente, pela natureza do ftp, ele é enviado sem criptografia para o servidor.
Walter Tross

7
Lembrete para newbs festança: você vai ter que usar aspas simples se o seu nome de usuário ou senha tem caracteres de controle (como $), por exemplo--user='user' --password='pa$$word'
tobek

164

Apenas para complementar a resposta dada por Thibaut Barrère.

eu usei

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

Observe a barra dupla após o nome do servidor. Se você não colocar uma barra extra, o caminho será relativo ao diretório inicial do usuário.

  • -nH evita a criação de um diretório com o nome do servidor
  • -nc evita a criação de um novo arquivo, se ele já existir no destino (é apenas ignorado)
  • --cut-dirs=5permite pegar o conteúdo do diretório / absolute / path / to / e colocá-lo no diretório em que você inicia o wget. O número 5 é usado para filtrar os 5 componentes do caminho. A barra dupla significa um componente extra.

3
Brilhante. A capacidade de ignorar arquivos que já existem é excelente para acompanhar as mais recentes adições em uma migração de servidor. O rsync é mais eficiente e flexível, mas às vezes essa opção simplesmente não está disponível, e somente o FTP pode ser usado.
23412 Jason

Params legais aqui, especialmente -nc e --cut-dirs. Obrigado por compartilhar!
Lance Cleveland

2
Eu nem sempre confiar "Passar arquivos existentes" porque um dos tanto pode ser incompleta ou diferentes em tamanho e conteúdo, mas bom ele mencionou a opção
Daniel W.

Ainda hoje, ainda uso esse comando wget quando não consigo usar o rsync. O -nc e --cut-dirs é tão útil!
Half Crazed

4
Impressionante! E se você não quiser colocar sua senha na linha de comando, poderá usar --ftp-user=USERe --ask-password.
shoover

25
ncftp -u <user> -p <pass> <server>
ncftp> mget directory

Eu não poderia iniciar sessão a um servidor FTP usando os parâmetros, mas usando a estrutura open ftp://USERNAME:PASSWORD@HOSTapós o início ncftp ...
feeela

+1 - Eu sei que este post é antigo, mas me deparei com ele e o ncftp era muito fácil de usar. Eu costumava -R para obter recursiva com ncftpget
Zack Macomber

definitivamente mais confiável wgete mais rápido também no modo TAR. Obrigado!
Lencinhaus

3
Isso não funciona como indicado no Ubuntu 14.04. A sintaxe que funcionou para mim foi "get -R directory" em vez de mget.
Ivan Ivan

Trabalhou para mim no Ubuntu 14.04. Eu não tinha que pensar que estava tudo ali.
ashley

22

Se lftpestiver instalado em sua máquina, use mirror dir. E você terminou. Veja o comentário de Ciro abaixo se você deseja baixar recursivamente um diretório.


7
btw, mirror -R dirfaz upload / atualização recursiva de diretório
Ciro Santilli郝海东冠状病六四事件法轮功

1
também pode usar mirror ./para baixar todos os arquivos e pastas recursivamente no caminho atual.
Nabi KAZ

Você também pode digitar mirror, para o diretório atual e suas subpastas.
Michael

18

Se você pode usar em scpvez de ftp, a -ropção fará isso por você. Gostaria de verificar se você pode usar um mecanismo de transferência de arquivos mais moderno que o FTP.


2
Votei a favor porque foi exatamente o meu primeiro pensamento, embora não responda estritamente à pergunta como está.
metao 22/09/08

Qual você propõe @ greg-hewgill? Eu tenho problema semelhante
Michal Gonda

1
scpainda tentará usar ssh, o que não funcionará se você tiver apenas credenciais de FTP. Sente estranho responder a um comentário a partir de 2008 dizendo que a tecnologia que eu estou preso com não é moderno :( bom e velho 2008, completou 18 anos no dia que você postou seu comentário.
aexl


7

Existe o 'ncftp' que está disponível para instalação no linux. Isso funciona no protocolo FTP e pode ser usado para baixar arquivos e pastas recursivamente. trabalha no linux. Foi usado e está funcionando bem para transferência recursiva de pastas / arquivos.

Verifique este link ... http://www.ncftp.com/


2
trabalho ncftp em janelas bem
Ilya

Eu amo o ncftp! Obrigado.
Jocull 26/10/12

3

Se você puder, eu sugiro fortemente que você tare bzip(ou gzip, seja qual for o seu barco flutua) o diretório no controle remoto máquina para um diretório de qualquer tamanho significativo, a economia de largura de banda será provavelmente vale o tempo para zip / unzip.


Talvez em 2008, mas em 2013 largura de banda não importa mais e você pode ter FTP, mas não consolar acesso :-)
Daniel W.

3

Se você deseja manter o FTP da linha de comando, tente o NcFTP. Em seguida, você pode usar get -R para obter recursivamente uma pasta. Você também receberá a conclusão.


3

wget -r ftp://url

Funciona perfeitamente para Redhat e Ubuntu


1

Você não deve usar ftp. Como telnetse não estivesse usando protocolos seguros, e as senhas são transmitidas em texto não criptografado. Isso facilita a captura de seu nome de usuário e senha por terceiros.

Para copiar diretórios remotos remotamente, essas opções são melhores:

  • rsyncé a ferramenta mais adequada se você puder fazer login via ssh, porque copia apenas as diferenças e pode reiniciar facilmente no meio, caso a conexão seja interrompida.

  • ssh -r é a segunda melhor opção para copiar recursivamente as estruturas de diretório.

Vejo:

  • página de manual rsync

  • página de manual do ssh


Não é seguro, apenas FTP
JosFabre 25/09

É 2015. O FTP não deve ser usado.
Tilo 29/09

2
Concordo. E sugestões para uma melhor segurança sempre devem ser dadas. Mas a pergunta era sobre FTP, então dizer que não se deve usá-lo não está ajudando
JosFabre

Eu respeitosamente discordo. Eles estão usando a ferramenta errada para o trabalho. Eles devem aprender a usar ferramentas seguras e atuais, em vez do ftp dos anos 80. Mais especificamente, ninguém deve mais executar um servidor ftp: P
Tilo

4
Desculpe, mas na semana passada eu estava acessando um servidor que só tinha conectividade FTP. Minha tarefa era migrar para longe dele.
Antti Haapala

-6

alterne o prompt pelo comando PROMPT.

Uso:

ftp>cd /to/directory    
ftp>prompt    
ftp>mget  *

9
Down0-vote: mget não é recursivo.
Lance Cleveland
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.