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.