ファイルの一部のみをダウンロード

ファイルの一部のみをダウンロード

axelまたは、aria2他の利用可能なツールを使用してファイル(すべてのファイル)の一部をダウンロードできるかどうかを確認します。

たとえば、ムービーファイルがあります(A / Vファイルでこの種の操作を実行するのが妥当であるため)。ファイルの最初の部分の最後の50MBまたは3番目の60MBのみをダウンロードするにはどうすればよいですか?

ファイルはほとんどHTTPサーバーにありますが、FTPサーバーにある可能性があります。別のプロトコルを介してダウンロードできる場合は、それもオプションです。

答え1

ファイルの一部をダウンロードできるかどうかは、コンテンツの転送に使用されるプロトコルによって異なります。

HTTP / 1.1を介してファイルを使用できる場合は、Rangeヘッダー(RFC 2616のセクション14.35を参照)を適切にサポートしているサーバーからファイルの一部をダウンロードできます。

次のファイルを検討してください。

$ cat testfile.txt
12345

nginx(RangeヘッダーをサポートするWebサーバー)を使用してこれを提供している場合は、一部をダウンロードできます(読みやすくするために改行が挿入されています)。

$ curl --header "Range: bytes=2-3" https://localhost/testfile.txt -k
34
$ curl --header "Range: bytes=0-1" https://localhost/testfile.txt -k
12 
$ curl --header "Range: bytes=4-" https://localhost/testfile.txt -k
5

これは、中断された転送を「再開」するために使用するカール、wget、およびその他のHTTPクライアントと同じ機能です。

FTPプロトコルは、RESTART(REST)コマンドによって指定されたオフセットでファイル転送を再開する機能を提供します(RFC 959のセクション4.1.3を参照)。 FTPが提供する上記と同じtestfile.txtを使用してください。

$ touch testfile.txt
$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.2.2)
Name (localhost:steve): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> rest 3
restarting at 3. execute get, put or append to initiate transfer
ftp> get testfile.txt
local: testfile.txt remote: testfile.txt
200 PORT command successful. Consider using PASV.
350 Restart position accepted (3).
150 Opening BINARY mode data connection for testfile.txt (6 bytes).
226 Transfer complete.
3 bytes received in 0.00 secs (19.1 kB/s)
ftp> 221 Goodbye.
$ cat testfile.txt
45

私は多くのFTPクライアントに慣れていないので、これが完了したかどうかはわかりませんが、RESTコマンドを使用してバイトのサブセットを読み取り、必要なバイト数を取得したら停止することは可能です。

aria2このフラグを使用すると、HTTPおよびFTP転送を再開できるように見えます-c。これはHTTPとFTPのみをサポートしているため、上記の機能を使用できます。しかし、基本的には、ファイルの終わりまたは中間のみをダウンロードすることをサポートしていないようです。このフラグは、--continueディスクにダミーファイルを作成することで利用できます。ファイルにNバイトがある場合、ariaはファイルのN + 1バイトから始めることができます。

答え2

curl持つ--range/-r変更は、HTTPおよびFTP(SFTPまで)プロトコルをサポートするように文書化されています。

curl --range start-end ftp://example.com/file.ext --output test.ext

答え3

私が見つけた簡単な方法は、次を使用することですhead

curl -s https://somedomain.com/file.txt | head -c 1000

これでファイルの最初のキロバイトが完了します。

私のユースケースでは、1GBのファイルコンテンツを解凍したいので、次のようにします。

curl -s https://somedomain.com/file.txt.bz2 | bzcat | head -c 1000 > 1kb-file.txt

本当に好きです!

関連情報