Como FTP 'obter' apenas um arquivo parcial

Como FTP 'obter' apenas um arquivo parcial

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.

informação relacionada