Вопрос: Как FTP «получить» только частичный файл


Я работаю над инструментом для получения некоторых данных, которые были захоронены в очень большом файле в удаленной системе. Было бы нецелесообразно копировать весь файл, и все данные, которые мне нужны, существуют в течение первых 1000 или около того байтов файла. Я знаю, что могу запустить get и просто отменить его с помощью ^ C, чтобы получить частичный файл, однако было бы сложно (если не невозможно) автоматизировать с любой согласованностью.

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

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

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 интерпретируется как часть имени файла. Потерпеть неудачу. Есть предположения?


6
2018-06-03 15:26


Источник




Ответы:


Используйте завиток. На странице руководства:

   -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 должно поддерживаться сервером, чтобы это работало.


8
2018-06-03 15:29



Вау! Это ... случайно ... - Matt Simmons
Ха-ха, вау, спасибо, ребята, это именно то, что мне было нужно, я бы хотел, чтобы вы оба заслужили ответ на этот вопрос, но, к сожалению, я получаю только одну галочку, поэтому, думаю, Supermathie получает ее за более быстрое умение V ^ C :) - Jax


Я думаю, вы хотите использовать завиток для этого

На странице руководства:

   -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

7
2018-06-03 15:29



Думаю, я победил тебя, как 5 секунд или около того: p - MikeyB
Вы пропустили оговорку: <pre> Загрузка TP-диапазона поддерживает только простой синтаксис «start-stop» (необязательно с одним из пропущенных чисел). Это зависит от параметра SIZE, отличного от RFC. </ Pre> - David Pashley


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

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


0
2018-06-03 15:31