Usando o wget para baixar recursivamente diretórios FTP inteiros

93

Quero copiar todos os arquivos e pastas de um host para outro. Os arquivos no host antigo ficam em / var / www / html e eu só tenho acesso FTP a esse servidor e não consigo TAR todos os arquivos. A conexão regular com o host antigo por FTP me leva à pasta / home / admin.

Tentei executar o seguinte comando do meu novo servidor:

wget -r ftp://username:[email protected]

Mas tudo o que recebo é um arquivo index.html inventado.

Qual a sintaxe correta para usar o wget recursivamente sobre FTP?


fonte
2
Observe que, por padrão, o wget -r tem uma profundidade de recursão máxima de 5; se você tiver subdiretórios mais profundos, eles serão ignorados, a menos que você altere isso (consulte -l na página de manual).
Mikewaters

Respostas:

125

Tente -mpor--mirror

wget -m ftp://username:[email protected]
Dave Cheney
fonte
15
Por motivos de segurança, seria bom usar --ask-passwordpara evitar que a senha seja mantida history.
soma de verificação
Isso é tão legal. Trabalhou como um encanto ..
Sambhav Sharma
Essa deve ser a resposta aceita (para melhor visibilidade).
bgondy
ele não inclui caminho do diretório para baixar, eu acho @Formoda resposta é melhor
Wasim A.
@WasimA., Você também pode adicionar o caminho do diretório aqui:wget -m ftp://username:[email protected]/mydir/
Alex Che
37

Você está certo, você só precisa de um * final no final:

wget -r ftp://username:[email protected]/dir/*

Para servidores compartilhados, você pode usar assim:

wget -r ftp://1.2.3.4/dir/* --ftp-user=username --ftp-password=password

Como a maioria dos servidores compartilhados possui ftp-username semelhante a username @ hostname, o primeiro comando wget não funciona e o segundo comando funciona bem.

Banee Ishaque K
fonte
1
Isso só iria um deep.Better diretório para usar o sinalizador -m
SvennD
em alguns casos, o segundo comando não está funcionando por causa do espaço. Você pode usar o primeiro comando para compartilhar hospedagem como esta. ** wget -r ftp: / / username% 40host: senha @ host / dir / **
Wasim A.
Nota: você deve usar um -mou -r -l infporque -r possui uma profundidade de recursão padrão de 5. Veja gnu.org/software/wget/manual/…
ndemou 10/10/17
7

Além do wget, você também pode usar o lftp no modo de script. O comando a seguir espelhará o conteúdo de um diretório FTP remoto especificado no diretório local especificado e poderá ser colocado no trabalho cron:

lftp -c 'open <hostname>; user <username> <password>; mirror -e <remote-src-path> <local-dest-path>; quit'

Ele lida automaticamente com a recursão em diretórios e permite especificar o diretório inicial da origem remota para o qual baixar os dados.

zappan
fonte
5

Você pode usar 'curlftpfs - montar um host ftp como um diretório local' e, uma vez montado, você pode usar ferramentas de arquivo normais como 'cp -r'.

chmeee
fonte
curlftpfstem grandes problemas de desempenho agora a menos que você rebaixarlibcurl3-gnutls
Hengjie
5

Verifique o comando wget abaixo para baixar dados do FTP recursivamente.

wget --user="<user-name>" --password="<password>" -r -np -nH --cut-dirs=1 --reject "index.html*" "<URL to download files>"

-r: É para download recursivo.

-np: É para nenhum pai ascendente.

-nH: Destina-se a desativar a criação de diretório com o mesmo nome de URL, ou seja, abc.xyz.com

--cut-dirs: É para ignorar o número de diretórios pai. O valor desta opção será diferente para o seu comando.

Você pode verificar executando o comando acima.

AVJ
fonte
2

Usar:

wget -m ftp://192.168.0.1

e espelhará todos os arquivos e pastas.

Rajat
fonte
Como eu disse, o login pelo FTP me leva para a pasta / home / admin, e os arquivos necessários estão em / var / www / html. Então, quando executo o comando que você sugeriu, só recebo o conteúdo de / home / admin Tentei executá-lo com 192.168.0.1/var/www/html , mas, em seguida, ele tenta CWD / home / admin / var / www / html. Como faço para acessar esta pasta a partir da raiz?
Não tenho experiência com esse problema específico, mas você pode tentar criar um link simbólico para / var / www / html em sua casa. Em seguida, você poderia usar um endereço como 192.168.0.1/html
prestomation
Tentei criar um link simbólico, mas resultou com o wget criando um link simbólico semelhante no meu local.
1

Essa é a sintaxe correta. Não sei por que você não está obtendo os resultados esperados.

Como sempre, há mais de uma maneira de fazê-lo. Experimente o ncftp, em particular o ncftpget

goo
fonte
Não consigo instalar mais software no meu novo servidor. Eu não deveria estar dizendo ao wget para baixar todos os arquivos de / var / www / html? Eu tentei wget -r nome de usuário: [email protected]/var/www/html, mas recebi um erro de diretório não encontrado.
1

Eu posso entender se você está tentando despejar isso no cron ou algo assim, mas por que não simplesmente ftp no servidor com seu cliente normal e mget *? Esse pode ser um caminho mais rápido para o sucesso.

dr.pooter
fonte
Eu tentei o mget *, mas não funcionou com subpastas, dizendo que a subpasta local não existe. Existe uma maneira de fazê-lo criar as pastas locais automaticamente?
Dependendo do seu cliente, a opção -r geralmente faz o truque. IE: mget -r *
dr.pooter 15/06/2009
mmm. O cliente ftp padrão do AFAIK no linux não foi projetado para recuperar diretórios recursivamente. Quero dizer - não há opção -r. outros clientes, como ncftp ou lftp, suportam recuperação recursiva, mas geralmente não estão disponíveis por padrão.
Stann
1

Como eu disse, o login através do FTP me leva à pasta / home / admin, e os arquivos necessários estão em / var / www / html

Eu acho que isso vai funcionar no seu caso:

wget -r ftp://192.168.0.1/../../var/www/html
kubanczyk
fonte
0

Me deparei com a hospedagem do Windows com o nome de usuário como brinkster / nome de usuário, portanto, o wget geraria um erro se você usar a sintaxe:

wget -m ftp://brinkster/username:[email protected]

Para superar isso, use

wget -m ftp://brinkster%2Fusername:[email protected]

Eu tive que enfrentar isso com o Windows hosting @ brinkster.

Anto Joseph
fonte
-3

wget --user username --password yourpassword ftp://example.com/ftpfiles/filename fará o trabalho ou você poderá adicionar * em vez de digitar o nome do arquivo: faz com que o wget pense na porta que é inválida no seu caso.

Khushwant Singh
fonte
Esta resposta a uma pergunta de quatro anos com várias respostas votadas não oferece nada de novo e até omite o requisito de uma cópia recursiva.
Sven