
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.