Download de arquivo do FTP usando cURL

20

Estou tentando usar um comando cURL para baixar um arquivo de um servidor FTP para uma unidade local no meu computador. eu tentei

curl " ftp: // myftpsite " - nome do usuário: senha -Q "CWD / users / myfolder /" -O "myfile.raw"

Mas ele retorna um erro que diz:

curl: o nome do arquivo remoto não tem tamanho!
curl: tente 'curl --help' ou 'curl --manual' para obter mais informações
curl: (6) Não foi possível resolver o host: myfile.raw; Nenhum registro de dados do tipo solicitado

Eu tentei alguns outros métodos, mas nada parece funcionar.

Além disso, não tenho muita certeza de como especificar para qual pasta quero baixar o arquivo. Como eu faria isso?

Josiah
fonte

Respostas:

26

Experimentar

curl -u user:password 'ftp://mysite/%2fusers/myfolder/myfile/raw' -o ~/Downloads/myfile.raw

Nos URLs de FTP, o caminho é relativo ao diretório inicial (geralmente o seu homedir). Você precisa especificar um caminho absoluto, e isso significa usar %2fpara especificar /. Isso é necessário porque o caminho nos ftp:URLs é tratado como uma lista de nomes separados por barras , cada um dos quais deve ser atribuído a um CWDcomando separado . O %2fé decodificado após a divisão. Consulte RFC 1738 e URLs de FTP .

Quanto ao local de saída, basta dar um caminho para -o.


Sugestões de segurança:

  • Não coloque sua senha no URL. Armazená-lo ~/.netrctambém não é particularmente seguro, mas pelo menos está oculto ps -ef.

  • Sua senha é enviada em texto não criptografado. Se o servidor suportar, use curl --ssl-reqdoucurl ftps://mysite/...

  • Usar o SFTP (o protocolo de transferência de arquivos SSH) seria ainda melhor.

user1686
fonte
Trabalhou muito bem. Não tenho muita certeza de compreender como o% 2f é usado, como você também está usando /, mas ei, isso funciona, então não vou reclamar. Obrigado pela ajuda!
197 Josiah
1
@Josiah: Parece que o "caminho" URL é dividido por /, e cada argumento é enviado com um CWDcomando: %2fusers/myfoldercomo CWD /users, CWD myfolder. Veja RFC 1738 sobre este tópico.
precisa saber é o seguinte
2
curl -T /users/myfolder/myfile.raw -u username:password "ftp://myftpsite/path/myfile.raw"

Eu uso isso o tempo todo. Ele funciona como um encanto.

cogly Stooge
fonte
1
Eu sou o primeiro a perceber que esta resposta está errada? O parâmetro -T significa "upload de arquivo", enquanto o OP solicitou "download de arquivo"
Kar.ma
0

Experimentar:

curl "ftp://user:password@myftpsite/users/myfolder/myfile.raw"

(Se o nome do arquivo remoto for 'myfile.raw')


fonte
Quando tento isso, recebo o seguinte erro: "curl: (9) O servidor negou que você alterasse para o diretório especificado". Eu acredito que é por isso que eu precisava usar o comando -Q "CWD".
0

Como sugere o yan,

curl " ftp: // usuário: password@myftpsite/users/myfolder/myfile.raw "

deve funcionar, mas alguns servidores FTP usam políticas de segurança que não são compatíveis com os padrões. Nesses casos, a opção --ftp-method singlecwdou --ftp-method nocwdpode ajudar.

Dan
fonte