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


13

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

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

回答:


14

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

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

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


6
これをシステム制限と組み合わせて、curlが$nバイトよりも大きいファイルを作成することを禁止できます(ulimit -f $(($n/512)); curl --max-filesize $n …)curlファイルサイズが$n/512512バイトブロックを超えると、エラーで中止されます。
ジル 'SO-悪であるのをやめる'

httrackもできます。
Vi。

6

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に制限します。

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


1

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


2
ジルのアプローチulimit(参照bash(1)setrlimit(2))となりますが、また仕事wget(1)、それは少し重い利きですが。
sarnold

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.