Domyślnie wget zapisuje do pliku, którego nazwa jest ostatnim składnikiem adresu URL, który mu przekazujesz. Wiele serwerów przekierowuje adresy URL http://www.url1.com/app?q=123&gibb=erish&gar=ble
na inny adres URL o ładnie wyglądającej nazwie pliku http://download.url1.com/files/something.pdf
. Możesz powiedzieć wgetowi, aby używał nazwy z przekierowanego adresu URL (tj. something.pdf
), Zamiast app?q=123&gibb=erish&gar=ble
przekazywać --trust-server-names
opcję. To nie jest tryb domyślny, ponieważ jego nieostrożne użycie może doprowadzić do zastąpienia nieprzewidywalnej nazwy pliku w bieżącym katalogu; ale jeśli ufasz serwerowi lub pracujesz w katalogu nie zawierającym innych cennych plików, --trust-server-names
zwykle jest to właściwe rozwiązanie.
Niektóre serwery używają Content-Disposition
nagłówka zamiast przekierowania do określenia nazwy pliku. Przekaż --content-disposition
opcję, aby wget używał tej nazwy pliku.
A zatem:
wget --content-disposition --trust-server-names -i list_of_urls
Jeśli nadal nie otrzymujesz ładnie wyglądających nazw plików, możesz podać własne. Załóżmy, że masz plik zawierający linie takie jak
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
Aby wget pobrał pliki do podanych nazw plików, zakładając, że nie ma znaków spacji w adresie URL lub w nazwach plików:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
err
Zmienna zawiera 0 jeśli wszystkie pliki do pobrania udało i 1 w przeciwnym razie, można return $err
, jeśli umieścić ten fragment w funkcji lub exit $err
jeśli umieścić ten fragment w ciąg.
Jeśli nie chcesz określać niczego poza adresami URL i nie możesz uzyskać ładnych nazw z serwera, możesz odgadnąć typ pliku i spróbować uzyskać co najmniej znaczące rozszerzenia.
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
Dodaj inne typy według potrzeb. Jeśli twoje file
polecenie nie ma takiej -m
opcji, pomiń je i sprawdź, jakie file
zwroty w twoim systemie dotyczą interesujących cię typów plików. Jeśli masz plik /etc/mime.types
w swoim systemie, możesz odczytać skojarzenia typów MIME z rozszerzeniami z zamiast dostarczać własną listę:
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
. W pliku list_of_urls ustaw każdą linię jako URL, spację, nazwę pliku (nphttp://url1/blah&blah=whatever some.pdf
. Następnie użyj tego samego co powyżej, zastępując linię wget./thatscript.sh $url
. W tym przypadku$url
jest to faktycznie linia z adresem URL i nazwą pliku, oczywiście.while read url; do read filename; wget -O $filename $url; done < list_of_urls
.Możesz bezpośrednio użyć
wget
opcji:źródło
-r
umożliwia pobieranie rekurencyjne. Nazwy plików nie są ustawione poprawnie.