Я работаю над инструментом для получения некоторых данных, которые хранятся в очень большом файле в удаленной системе. Было бы непрактично копировать весь файл, а все необходимые мне данные существуют в пределах первых 1000 или около того байтов файла. Я знаю, что могу начать получение и просто отменить его с помощью ^ C, чтобы получить частичный файл, однако это было бы сложно (если не невозможно) автоматизировать с какой-либо согласованностью.
Я хотел бы сказать моему ftp-клиенту, чтобы он получал только x байтов удаленного файла и завершал работу, как только они у него были. Я нашел несколько клиентов Windows, которые выполняют частичную загрузку, но я ничего не нашел на странице руководства ftp, а документация в Интернете скудна.
Я нашел это HowTo: http://cdsarc.u-strasbg.fr/doc/ftp.htx что предполагает следующий синтаксис:
ftp> get bigfile.dat:0-5000 bigfile.nxt
Мне неясно, должно ли это быть реализовано на клиенте или на сервере, но в любом случае, похоже, это не работает в моей среде. (Стандартный ftp-клиент linux, подключающийся к FTP-серверу, работающему на z / OS)
Даже при попытке между стандартным ftp-клиентом linux и сервером filezilla в Windows мои попытки терпят неудачу следующим образом
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
Таким образом,: 0-10c интерпретируется как часть имени файла. Потерпеть поражение. Есть предположения?
Используйте curl. На странице руководства:
-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)
Однако обратите внимание, что расширение SIZE должно поддерживаться сервером, чтобы это работало.
Я думаю, ты хочешь использовать для этого curl
На странице руководства:
-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
Подобные схемы сильно зависят от реализации сервера. Некоторые серверы поддерживают гораздо больше функций, чем другие.
Я бы исследовал какой-нибудь способ разделения файла или рассмотрел бы настраиваемое приложение, которое будет отправлять запрашиваемый вами диапазон.