Назад | Перейти на главную страницу

Как по FTP получить только частичный файл

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

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

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