Per impostazione predefinita, wget scrive su un file il cui nome è l'ultimo componente dell'URL che gli viene passato. Molti server reindirizzano gli URL come http://www.url1.com/app?q=123&gibb=erish&gar=ble
a un URL diverso con un nome file gradevole come http://download.url1.com/files/something.pdf
. Puoi dire a wget di usare il nome dall'URL reindirizzato (ad es. something.pdf
) Invece di app?q=123&gibb=erish&gar=ble
passare l' --trust-server-names
opzione. Questa non è la modalità predefinita perché, se usata con noncuranza, potrebbe portare a sovrascrivere un nome di file imprevedibile nella directory corrente; ma se ti fidi del server o stai lavorando in una directory che non contiene altri file preziosi, di --trust-server-names
solito è la cosa giusta da usare.
Alcuni server utilizzano Content-Disposition
un'intestazione anziché il reindirizzamento per specificare un nome file. Passa l' --content-disposition
opzione per fare in modo che wget usi questo nome file.
Così:
wget --content-disposition --trust-server-names -i list_of_urls
Se non stai ancora ottenendo nomi di file di bell'aspetto, potresti voler specificare i tuoi. Supponiamo di avere un file contenente righe come
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
Per fare in modo che wget scarichi i file nei nomi file specificati, supponendo che non vi siano caratteri spazi bianchi nell'URL o nei nomi file:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
La err
variabile contiene 0 se tutti i download hanno avuto esito positivo e 1 in caso contrario, puoi return $err
inserire questo snippet in una funzione o exit $err
inserire questo snippet in una stringa.
Se non si desidera specificare altro che gli URL e non è possibile ottenere nomi carini dal server, è possibile indovinare il tipo di file e tentare di ottenere estensioni almeno significative.
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
Aggiungi altri tipi come desiderato. Se il tuo file
comando non ha l' -m
opzione, lascialo fuori e controlla cosa file
ritorna sul tuo sistema per i tipi di file che ti interessano. Se hai un file /etc/mime.types
sul tuo sistema, puoi leggere le associazioni dei tipi MIME alle estensioni da invece di fornire il tuo elenco:
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
. Nel file list_of_urls, trasforma ogni riga in un url, uno spazio bianco, un nome di file (ad eshttp://url1/blah&blah=whatever some.pdf
. Quindi usa lo stesso come sopra, sostituendo la linea di wget con./thatscript.sh $url
. In questo caso$url
è in realtà una linea con un url e un nome di file, ovviamente.