Varsayılan olarak, wget, kendisine ilettiğiniz URL'nin son bileşeni olan adıyla bir dosyaya yazar. Pek çok sunucu, URL'leri http://www.url1.com/app?q=123&gibb=erish&gar=ble
, hoş görünümlü bir dosya adı olan farklı bir URL'ye yönlendirir http://download.url1.com/files/something.pdf
. Wget seçeneğini , seçeneği iletmek something.pdf
yerine , yönlendirilen URL'den (yani ) kullanmasını söyleyebilirsiniz . Bu, varsayılan mod değildir, çünkü dikkatsizce kullanılırsa, geçerli dizindeki öngörülemeyen bir dosya adının üzerine yazılmasına neden olabilir; ancak sunucuya güveniyorsanız veya başka hiçbir değerli dosya içermeyen bir dizinde çalışıyorsanız , genellikle doğru olanı kullanın.app?q=123&gibb=erish&gar=ble
--trust-server-names
--trust-server-names
Bazı sunucular Content-Disposition
bir dosya adı belirtmek için yönlendirme yerine bir başlık kullanır. Geçiş --content-disposition
Bu dosya adını kullanmak wget marka seçeneği.
Böylece:
wget --content-disposition --trust-server-names -i list_of_urls
Hala güzel görünen dosya adları alamıyorsanız, kendinizinkini belirtmek isteyebilirsiniz. Diyelim ki satırları içeren bir dosyanız var.
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
Wget’in dosyaları belirtilen dosya adlarına indirmesini sağlamak için, URL’de veya dosya adlarında boşluk karakteri olmadığını varsayarak:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
err
Tüm indirme Başarsalardı ve 1 aksi yapabilirsiniz değişken 0 varsa return $err
bir fonksiyonun içinde bu pasajı koymak veya eğer exit $err
bir dizesinde bu pasajı koyarsanız.
URL'lerden başka bir şey belirtmek istemiyorsanız ve sunucudan hoş adlar alamıyorsanız, dosya türünü tahmin edebilir ve en azından anlamlı uzantılar almaya çalışabilirsiniz.
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
İstediğiniz diğer türleri ekleyin. Senin Eğer file
komut yok -m
seçeneği, dışarı bırakın ve ne kontrol file
ilgilendiğiniz dosya türleri için sisteminizde döner. Eğer bir dosyanız varsa /etc/mime.types
sisteminizde, içinden uzantılarına MIME türlerinin ilişkilendirmeleri okuyabilir kendi listenizi sağlamak yerine:
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
. List_of_urls dosyasında her satırı bir url, boşluk, bir dosya adı yapın (örnhttp://url1/blah&blah=whatever some.pdf
. Sonra yukarıdakiyle aynı kullanın, wget satırını değiştirerek./thatscript.sh $url
. Bu durumda$url
aslında bir url ve bir dosya