
私は、リモート システム上の非常に大きなファイル内に埋め込まれているデータを取得するためのツールに取り組んでいます。ファイル全体をコピーするのは非現実的で、必要なデータはすべてファイルの最初の 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
このようなスキームは、サーバーの実装に大きく依存します。サーバーによっては、他のサーバーよりも多くの機能をサポートしています。
ファイルを分割する方法を調べるか、要求された範囲を送信するカスタム アプリケーションを検討します。