Par défaut, wget écrit dans un fichier dont le nom est le dernier composant de l'URL que vous lui transmettez. De nombreux serveurs redirigent les URL similaires http://www.url1.com/app?q=123&gibb=erish&gar=ble
vers une URL différente avec un joli nom de fichier comme http://download.url1.com/files/something.pdf
. Vous pouvez indiquer à wget d'utiliser le nom de l'URL redirigée (c.-à-d. something.pdf
) Au lieu de app?q=123&gibb=erish&gar=ble
transmettre l' --trust-server-names
option. Ce n'est pas le mode par défaut car, s'il est utilisé sans précaution, il pourrait entraîner l'écrasement d'un nom de fichier imprévisible dans le répertoire en cours; mais si vous faites confiance au serveur ou travaillez dans un répertoire ne contenant aucun autre fichier précieux, --trust-server-names
c'est généralement la bonne chose à utiliser.
Certains serveurs utilisent un en- Content-Disposition
tête au lieu d'une redirection pour spécifier un nom de fichier. Passez l' --content-disposition
option pour que wget utilise ce nom de fichier.
Ainsi:
wget --content-disposition --trust-server-names -i list_of_urls
Si vous n'obtenez toujours pas de beaux noms de fichiers, vous pouvez spécifier le vôtre. Supposons que vous ayez un fichier contenant des lignes comme
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
Pour que wget télécharge les fichiers vers les noms de fichier spécifiés, en supposant que l'URL ou les noms de fichier ne contiennent pas de caractères d'espacement:
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 contient 0 si tous les téléchargements ont réussi et 1 sinon, vous pouvez le faire return $err
si vous mettez cet extrait de code dans une fonction ou exit $err
si vous insérez cet extrait de code dans une chaîne.
Si vous ne souhaitez spécifier rien d'autre que les URL et que vous ne pouvez pas obtenir de noms intéressants du serveur, vous pouvez deviner le type de fichier et tenter d'obtenir au moins des extensions significatives.
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
Ajoutez d'autres types si vous le souhaitez. Si votre file
commande n'a pas l' -m
option, laissez-la de côté et vérifiez ce qui file
retourne sur votre système pour les types de fichiers qui vous intéressent. Si vous avez un fichier /etc/mime.types
sur votre système, vous pouvez lire les associations de types MIME avec des extensions. au lieu de fournir votre propre liste:
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
. Dans le fichier list_of_urls, faites de chaque ligne une url, un espace, un nom de fichier (par exemplehttp://url1/blah&blah=whatever some.pdf
, utilisez la même chose que ci-dessus, en remplaçant la ligne wget par./thatscript.sh $url
. Dans ce cas, il$url
s’agit en fait d’une ligne avec une url et un nom de fichier.while read url; do read filename; wget -O $filename $url; done < list_of_urls
.Vous pouvez directement utiliser l'
wget
option:la source
-r
active le téléchargement récursif. Les noms de fichiers ne sont pas définis correctement.