Standardmäßig schreibt wget in eine Datei, deren Name die letzte Komponente der URL ist, die Sie an sie übergeben. Viele Server leiten URLs gerne http://www.url1.com/app?q=123&gibb=erish&gar=ble
zu einer anderen URL mit einem ansprechenden Dateinamen wie http://download.url1.com/files/something.pdf
. Sie können wget anweisen, den Namen von der umgeleiteten URL (dh something.pdf
) zu verwenden, anstatt app?q=123&gibb=erish&gar=ble
die --trust-server-names
Option zu übergeben. Dies ist nicht der Standardmodus, da bei unsachgemäßer Verwendung ein unvorhersehbarer Dateiname im aktuellen Verzeichnis überschrieben werden kann. Aber wenn Sie dem Server vertrauen oder in einem Verzeichnis arbeiten, das keine anderen wertvollen Dateien enthält, --trust-server-names
ist dies normalerweise die richtige Wahl.
Einige Server verwenden einen Content-Disposition
Header anstelle einer Umleitung, um einen Dateinamen anzugeben. Übergeben Sie die --content-disposition
Option, damit wget diesen Dateinamen verwendet.
Somit:
wget --content-disposition --trust-server-names -i list_of_urls
Wenn Sie immer noch keine ansprechenden Dateinamen erhalten, können Sie Ihre eigenen angeben. Angenommen, Sie haben eine Datei mit Zeilen wie
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
Damit wget die Dateien in die angegebenen Dateinamen herunterlädt, gehen Sie davon aus, dass die URL oder die Dateinamen keine Leerzeichen enthalten:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
Die err
Variable enthält 0, wenn alle Downloads erfolgreich waren, und 1, return $err
wenn Sie dieses Snippet in eine Funktion oder exit $err
dieses Snippet in eine Zeichenfolge einfügen.
Wenn Sie nur die URLs angeben möchten und keine netten Namen vom Server erhalten, können Sie den Dateityp erraten und versuchen, mindestens sinnvolle Erweiterungen zu erhalten.
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
Fügen Sie nach Bedarf weitere Typen hinzu. Wenn Ihr file
Befehl diese -m
Option nicht bietet, lassen Sie sie weg und prüfen Sie, welche file
Dateitypen /etc/mime.types
auf Ihrem System angezeigt werden . Wenn sich auf Ihrem System eine Datei befindet , können Sie Zuordnungen von MIME-Typen zu Erweiterungen lesen es anstatt Ihre eigene Liste zu liefern:
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
. Machen Sie in der Datei list_of_urls aus jeder Zeile eine URL, ein Leerzeichen und einen Dateinamen (zhttp://url1/blah&blah=whatever some.pdf
. B. verwenden Sie dasselbe wie oben und ersetzen Sie die wget-Zeile durch./thatscript.sh $url
. In diesem Fall$url
handelt es sich natürlich tatsächlich um eine Zeile mit einer URL und einem Dateinamen.