Как «получить» по FTP только часть файла

Как «получить» по FTP только часть файла

Я работаю над инструментом для получения некоторых данных, которые зарыты в очень большом файле на удаленной системе. Было бы непрактично копировать весь файл, а все нужные мне данные находятся в первых 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

Подобные схемы сильно зависят от реализации сервера. Некоторые серверы поддерживают гораздо больше функций, чем другие.

Я бы изучил какой-нибудь способ разделения файла или рассмотрел бы создание специального приложения, которое будет отправлять запрошенный вами диапазон.

Связанный контент