Cómo 'obtener' por FTP solo un archivo parcial

Cómo 'obtener' por FTP solo un archivo parcial

Estoy trabajando en una herramienta para obtener algunos datos que están ocultos dentro de un archivo muy grande en un sistema remoto. No sería práctico copiar todo el archivo, y todos los datos que necesito existen dentro de los primeros 1000 bytes aproximadamente del archivo. Sé que puedo iniciar una obtención y simplemente cancelarla con ^C para obtener un archivo parcial; sin embargo, esto sería difícil (si no imposible) de automatizar con coherencia.

Me gustaría decirle a mi cliente ftp que solo tome x bytes del archivo remoto y salga tan pronto como los tenga. Encontré algunos clientes de Windows que realizan descargas parciales, pero no encontré nada en la página de manual de ftp y la documentación en línea es escasa.

Encontré este Cómo:http://cdsarc.u-strasbg.fr/doc/ftp.htxque sugiere la siguiente sintaxis:

ftp> get bigfile.dat:0-5000 bigfile.nxt

No me queda claro si se supone que esto debe implementarse en el cliente o en el servidor, pero en cualquier caso, no parece funcionar en mi entorno. (Cliente ftp estándar de Linux que se conecta a un servidor FTP que se ejecuta en z/OS)

Incluso cuando intento entre el cliente ftp estándar de Linux y un servidor Filezilla en Windows, mis intentos fallan de la siguiente manera

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

Entonces, parece que :0-10c se interpreta como parte del nombre del archivo. Fallar. ¿Alguna idea?

Respuesta1

Usa rizo. Desde la 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)

Sin embargo, tenga en cuenta que el servidor debe admitir la extensión TAMAÑO para que esto funcione.

Respuesta2

Creo que quieres usar curl para esto.

Desde la 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

Respuesta3

Esquemas como este dependen en gran medida de la implementación del servidor. Algunos servidores admiten muchas más funciones que otros.

Investigaría alguna forma de dividir el archivo o consideraría una aplicación personalizada que envíe el rango que solicita.

información relacionada