De forma predeterminada, wget escribe en un archivo cuyo nombre es el último componente de la URL que le pasa. Muchos servidores redirigen las URL como http://www.url1.com/app?q=123&gibb=erish&gar=ble
a una URL diferente con un nombre de archivo atractivo http://download.url1.com/files/something.pdf
. Puede decirle a wget que use el nombre de la URL redirigida (es decir something.pdf
) en lugar de app?q=123&gibb=erish&gar=ble
pasar la --trust-server-names
opción. Este no es el modo predeterminado porque, si se usa descuidadamente, podría llevar a sobrescribir un nombre de archivo impredecible en el directorio actual; pero si confía en el servidor o está trabajando en un directorio que no contiene otros archivos preciosos, --trust-server-names
generalmente es lo correcto.
Algunos servidores usan un Content-Disposition
encabezado en lugar de la redirección para especificar un nombre de archivo. Pase la --content-disposition
opción para hacer que wget use este nombre de archivo.
Así:
wget --content-disposition --trust-server-names -i list_of_urls
Si todavía no obtiene nombres de archivo atractivos, puede especificar los suyos. Supongamos que tiene un archivo que contiene líneas como
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
Para hacer que wget descargue los archivos a los nombres de archivo especificados, suponiendo que no haya espacios en blanco en la URL o en los nombres de archivo:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
La err
variable contiene 0 si todas las descargas tuvieron éxito y 1 de lo contrario, puede hacerlo return $err
si coloca este fragmento en una función o exit $err
si coloca este fragmento en una cadena.
Si no desea especificar nada más que las URL, y no puede obtener nombres agradables del servidor, puede adivinar el tipo de archivo e intentar obtener al menos extensiones significativas.
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
Agregue otros tipos según lo desee. Si su file
comando no tiene la -m
opción, déjelo fuera y verifique qué file
retorna en su sistema para los tipos de archivo que le interesan. Si tiene un archivo /etc/mime.types
en su sistema, puede leer asociaciones de tipos MIME a extensiones desde en lugar de proporcionar tu propia lista:
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
. En el archivo list_of_urls, hacer que cada línea de una url, espacio en blanco, un nombre de archivo (por ejemplohttp://url1/blah&blah=whatever some.pdf
A continuación, utilice el mismo que el anterior, en sustitución de la línea de wget con../thatscript.sh $url
En este caso.$url
En realidad, es una línea con una URL y un nombre de archivo, por supuesto.while read url; do read filename; wget -O $filename $url; done < list_of_urls
.Puede usar directamente la
wget
opción:fuente
-r
permite la descarga recursiva. Los nombres de archivo no están configurados correctamente.