
Estou trabalhando em uma ferramenta para obter alguns dados enterrados em um arquivo muito grande em um sistema remoto. Seria impraticável copiar o arquivo inteiro e todos os dados necessários existem nos primeiros 1.000 bytes do arquivo. Eu sei que posso iniciar um get e simplesmente cancelá-lo com ^C para obter um arquivo parcial, porém isso seria difícil (se não impossível) de automatizar com alguma consistência.
Gostaria de dizer ao meu cliente FTP para pegar apenas x bytes do arquivo remoto e sair assim que os tiver. Encontrei alguns clientes Windows que fazem downloads parciais, mas não encontrei nada na página de manual do FTP e a documentação on-line é escassa.
Encontrei este tutorial:http://cdsarc.u-strasbg.fr/doc/ftp.htxque sugere a seguinte sintaxe:
ftp> get bigfile.dat:0-5000 bigfile.nxt
Não está claro para mim se isso deve ser implementado no cliente ou no servidor, mas em ambos os casos, parece não funcionar no meu ambiente. (Cliente FTP Linux padrão conectado a um servidor FTP em execução no z/OS)
Mesmo ao tentar entre o cliente FTP padrão Linux e um servidor Filezilla no Windows, minhas tentativas falham da seguinte maneira
ftp> get green.gif:0-10c
local: green.gif:0-10c remote: green.gif:0-10c
227 Entering Passive Mode (9,42,91,226,4,105)
550 File not found
Portanto, :0-10c é interpretado como parte do nome do arquivo, ao que parece. Falhar. Alguma ideia?
Responder1
Use ondulação. Na página de manual:
-r/--range <range>
(HTTP/FTP/FILE) Retrieve a byte range (i.e a partial document)
from a HTTP/1.1, FTP server or a local FILE. Ranges can be spec-
ified in a number of ways.
0-499 specifies the first 500 bytes
500-999 specifies the second 500 bytes
-500 specifies the last 500 bytes
9500- specifies the bytes from offset 9500 and forward
0-0,-1 specifies the first and last byte only(*)(H)
500-700,600-799
specifies 300 bytes from offset 500(H)
No entanto, observe que a extensão SIZE deve ser suportada pelo servidor para que isso funcione.
Responder2
Eu acho que você quer usar curl para isso
Na página de manual:
-r/--range <range>
(HTTP/FTP/FILE) Retrieve a byte range (i.e a partial document)
from a HTTP/1.1, FTP server or a local FILE. Ranges can be spec‐
ified in a number of ways.
0-499 specifies the first 500 bytes
500-999 specifies the second 500 bytes
-500 specifies the last 500 bytes
9500- specifies the bytes from offset 9500 and forward
Responder3
Esquemas como este dependem muito da implementação do servidor. Alguns servidores suportam muito mais recursos do que outros.
Eu investigaria alguma maneira de dividir o arquivo ou consideraria um aplicativo personalizado que enviaria o intervalo solicitado.