
Я работаю над инструментом для получения некоторых данных, которые зарыты в очень большом файле на удаленной системе. Было бы непрактично копировать весь файл, а все нужные мне данные находятся в первых 1000 байтах файла. Я знаю, что могу начать get и просто отменить его с помощью ^C, чтобы получить частичный файл, однако это будет трудно (если не невозможно) автоматизировать с какой-либо последовательностью.
Я хотел бы сказать своему ftp-клиенту, чтобы он захватил только x байт удаленного файла и вышел, как только он их получит. Я нашел несколько клиентов Windows, которые делают частичную загрузку, но я ничего не нашел на странице руководства ftp, а документация в сети скудна.
Я нашел это руководство: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, похоже, интерпретируется как часть имени файла. Неудача. Есть мысли?
решение1
Используйте curl. Из man-страницы:
-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)
Однако обратите внимание, что для работы этого расширения сервер должен его поддерживать.
решение2
Я думаю, что для этого нужно использовать 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
решение3
Подобные схемы сильно зависят от реализации сервера. Некоторые серверы поддерживают гораздо больше функций, чем другие.
Я бы изучил какой-нибудь способ разделения файла или рассмотрел бы создание специального приложения, которое будет отправлять запрошенный вами диапазон.