Como fazer o FTP 'obter' apenas um arquivo parcial

6

Estou trabalhando em uma ferramenta para obter alguns dados que estão enterrados em um arquivo muito grande em um sistema remoto. Seria impraticável copiar todo o arquivo, e todos os dados de que preciso existem nos primeiros 1000 ou mais bytes do arquivo. Eu sei que posso começar um get e apenas cancelá-lo com ^ C para obter um arquivo parcial, no entanto, isso seria difícil (se não impossível) de automatizar com alguma consistência.

Eu gostaria de dizer ao meu cliente ftp que pegue somente x bytes do arquivo remoto e saia assim que ele aparecer. Eu encontrei alguns clientes Windows que fazem downloads parciais, mas eu não encontrei nada na página man ftp e documentação online é escassa.

Eu encontrei este HowTo: link que 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 que não funciona no meu ambiente. (Cliente linux ftp padrão conectando-se a um servidor FTP em execução no z / OS)

Mesmo ao tentar entre o cliente ftp padrão do 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

Então o: 0-10c é interpretado como parte do nome do arquivo. Falhou. Alguma idéia?

    
por Jax 03.06.2009 / 17:26

3 respostas

8

Use curl. Na página do 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.

    
por 03.06.2009 / 17:29
7

Eu acho que você quer usar o curl para isso

Da página do 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
    
por 03.06.2009 / 17:29
0

Esquemas como esse dependem muito da implementação do servidor. Alguns servidores suportam muito mais recursos que outros.

Eu investigaria alguma maneira de dividir o arquivo ou considerar um aplicativo personalizado que enviará o intervalo solicitado.

    
por 03.06.2009 / 17:31

Tags