デフォルトでは、wgetは、渡したURLの最後のコンポーネントの名前を持つファイルに書き込みます。多くのサーバーhttp://www.url1.com/app?q=123&gibb=erish&gar=bleは、などの見栄えの良いファイル名を持つ別のURLにURLをリダイレクトしますhttp://download.url1.com/files/something.pdf。オプションを渡すsomething.pdf代わりに、リダイレクトされたURLの名前(つまり)を使用するようにwgetに指示できます。これはデフォルトモードではありません。不注意に使用すると、現在のディレクトリ内の予測できないファイル名が上書きされる可能性があるためです。ただし、サーバーを信頼している場合、または他の貴重なファイルが含まれていないディレクトリで作業している場合は、通常正しい使用方法です。app?q=123&gibb=erish&gar=ble--trust-server-names--trust-server-names
一部のサーバーでは、Content-Dispositionリダイレクトの代わりにヘッダーを使用してファイル名を指定します。--content-dispositionwgetにこのファイル名を使用させるオプションを渡します。
したがって:
wget --content-disposition --trust-server-names -i list_of_urls
それでも見栄えの良いファイル名が得られない場合は、独自のファイル名を指定できます。次のような行を含むファイルがあるとします
http://www.url1.com/app?q=123&gibb=erish&gar=ble foo.pdf
http://www.url2.com/app?q=111&wha=tcha&mac=allit bar.txt
URLまたはファイル名に空白文字がないと仮定して、wgetが指定されたファイル名にファイルをダウンロードするようにするには:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
errすべてのダウンロードが成功した場合、1がそうでない場合、あなたができる変数は0が含まれていreturn $errますが、機能にこのスニペットを入れた場合、またはexit $errあなたが文字列で、このスニペットを置く場合。
URL以外を指定したくない場合、サーバーから適切な名前を取得できない場合は、ファイルの種類を推測し、少なくとも意味のある拡張子を取得しようとします。
err=0
n=1
while read -r url; do
if wget -O tmpfile "$url"; then
ext=data
case $(file -i tmpfile) in
application/pdf) ext=pdf;;
image/jpeg) ext=jpg;;
text/html) ext=html;;
text/*) ext=txt;;
esac
mv tmpfile "$n.$ext"
else
err=1
fi
n=$((n+1))
done
必要に応じて他のタイプを追加します。fileコマンドに-mオプションがない場合は、コマンドをfile省略し、目的のファイルタイプに対してシステムに返される内容を確認します。システムにファイルがある場合は、/etc/mime.typesMIMEタイプと拡張子の関連付けを読み取ることができます。独自のリストを提供する代わりに:
n=1
while read -r url; do
if wget -O tmpfile "$url"; then
mime_type=$(file -m tmpfile)
ext=$(awk "$1 == \"$mime_type\" {print \$2; exit} END {print \"data\"}" /etc/mime.types)
mv tmpfile "$n.$ext"
else
err=1
fi
n=$((n+1))
done
wget -O $2 $1です。1行で小さなスクリプトを作成します。list_of_urlsファイルで、各行をURL、空白、ファイル名にします(たとえばhttp://url1/blah&blah=whatever some.pdf、上記と同じものを使用し、wget行を./thatscript.sh $url。に置き換えます。この場合$url、実際には、当然URLとファイル名の行です。)