ファイルの一部のみをFTPで取得する方法

ファイルの一部のみをFTPで取得する方法

私は、リモート システム上の非常に大きなファイル内に埋め込まれているデータを取得するためのツールに取り組んでいます。ファイル全体をコピーするのは非現実的で、必要なデータはすべてファイルの最初の 1000 バイト程度に存在します。取得を開始して ^C でキャンセルするだけで、部分的なファイルを取得できることはわかっていますが、これを一貫して自動化するのは困難 (不可能ではないにしても) です。

FTP クライアントに、リモート ファイルの x バイトだけを取得して、取得したらすぐに終了するように指示したいと思います。部分的なダウンロードを行う Windows クライアントをいくつか見つけましたが、FTP のマニュアル ページには何も見つからず、オンラインのドキュメントもほとんどありません。

このHowToを見つけました:http://cdsarc.u-strasbg.fr/doc/ftp.htxこれは次の構文を示唆します。

ftp> get bigfile.dat:0-5000 bigfile.nxt

これがクライアントに実装されるのか、サーバーに実装されるのかは不明ですが、いずれにしても私の環境では動作しないようです。(z/OS で実行されている FTP サーバーに接続する標準 Linux FTP クライアント)

Linuxの標準FTPクライアントとWindowsの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 はファイル名の一部として解釈されるようです。失敗です。何かご意見はありますか?

答え1

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 拡張をサポートしている必要があることに注意してください。

答え2

これには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

答え3

このようなスキームは、サーバーの実装に大きく依存します。サーバーによっては、他のサーバーよりも多くの機能をサポートしています。

ファイルを分割する方法を調べるか、要求された範囲を送信するカスタム アプリケーションを検討します。

関連情報