デフォルトでは、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-disposition
wgetにこのファイル名を使用させるオプションを渡します。
したがって:
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.types
MIMEタイプと拡張子の関連付けを読み取ることができます。独自のリストを提供する代わりに:
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とファイル名の行です。)