web-dev-qa-db-ja.com

wgetでダウンロードファイルサイズを制限するにはどうすればよいですか?

(phpスクリプトから)wgetを使用して画像ファイルをダウンロードしたいのですが、特定のサイズを超えるファイルをダウンロードしたくありません。

wgetでファイルサイズを制限できますか?そうでない場合、より良い方法は何ですか?

13
T. Brian Jones

ダウンロードのスクリプトを作成する場合は、代わりにcurlの使用を検討する必要があります。 Wgetは出力を解析してサイト全体を再帰的に取得できますが、curlには特定のファイルの実際のダウンロードに関連するオプションがはるかに多くあります。これは、manページの関連オプションです。

--max-filesize
ダウンロードするファイルの最大サイズ(バイト単位)を指定します。要求されたファイルがこの値より大きい場合、転送は開始されず、curlは終了コード63で戻ります。
注:ダウンロード前にファイルサイズが常にわかっているとは限りません。そのようなファイルの場合、ファイル転送がこの制限よりも大きくなっても、このオプションは効果がありません。

一部のファイルに対してのみ機能することに関する注意は、検討する価値があります。クライアントはサーバーに依存して、ダウンロードが始まる前にファイルのサイズを報告します。ほとんどの、しかし確実ではないすべてのサーバーがこれを報告します。

14
Caleb

Wgetを使用する場合は、ダウンロードせずにファイルのサイズをテストする方法を次に示します。

wget --spider $URL 2>&1 | awk '/Length/ {print $2}'

どこ $URLはもちろん、ダウンロードするファイルのURLです。

したがって、出力に基づいてスクリプトを調整できます。といった:

{ [ $(wget --spider $URL 2>&1 | awk '/Length/ {print $2}') -lt 20971520 ] && wget $URL; } || echo file to big

ダウンロードサイズを20 MBに制限します。

(コードは醜く、情報提供のみを目的としています)。

6
Philomath

Wgetで最大ファイルサイズを設定する合理的な方法はないようです。

1
T. Brian Jones

wgetには-Q--quota複数のURL(再帰的または入力リスト)が指定されている場合の最大ダウンロード量を制限するオプション。

https://www.gnu.org/software/wget/manual/html_node/Download-Options.html

https://stackoverflow.com/a/20318140/4364036

0
wesinat0r