За замовчуванням wget записує у файл, ім'я якого є останнім компонентом URL-адреси, яку ви передаєте до нього. Багато серверів переспрямовують такі URL-адреси, як http://www.url1.com/app?q=123&gibb=erish&gar=ble
на іншу URL-адресу з приємним назвою файлу на зразок http://download.url1.com/files/something.pdf
. Ви можете сказати wget використовувати ім’я з перенаправленої URL-адреси (тобто something.pdf
) замість того app?q=123&gibb=erish&gar=ble
, щоб передавати --trust-server-names
параметр. Це не режим за замовчуванням, оскільки при необережному використанні це може призвести до заміни непередбачуваного імені файлу в поточному каталозі; але якщо ви довіряєте серверу або працюєте в каталозі, який не містить інших цінних файлів, --trust-server-names
зазвичай це правильне використання.
Деякі сервери використовують Content-Disposition
заголовок замість перенаправлення, щоб вказати ім'я файлу. Пройдіть --content-disposition
опцію, щоб змусити wget використовувати це ім'я файлу.
Таким чином:
wget --content-disposition --trust-server-names -i list_of_urls
Якщо ви все ще не отримуєте гарних імен файлів, ви можете вказати власні. Припустимо, у вас є файл, що містить на зразок рядків
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
Щоб заставити wget завантажувати файли у вказані імена файлів, якщо у URL-адресі чи в іменах файлів немає символів пробілу:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
err
Мінлива містить 0 , якщо все завантаження вдалося , і 1 в іншому випадку, ви можете , return $err
якщо ви помістіть цей фрагмент коду в функції або exit $err
якщо ви помістіть цей фрагмент в рядку.
Якщо ви не хочете вказувати нічого, крім URL-адрес, і не можете отримати приємні імена від сервера, ви можете вгадати тип файлу та спробувати отримати хоча б значущі розширення.
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
Додайте інші види за бажанням. Якщо у вашої file
команди немає -m
можливості, залиште її і перевірте, що file
повертається у вашій системі для типів файлів, які вас цікавлять. Якщо у вас є файл /etc/mime.types
у вашій системі, ви можете читати асоціації типів MIME з розширеннями з це замість надання власного списку:
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
. У файлі list_of_urls, зробити кожен рядок URL, пробіл, ім'я файлу (наприклад ,http://url1/blah&blah=whatever some.pdf
потім використовувати ті ж, що і вище, замінивши WGET лінію../thatscript.sh $url
У цьому випадку.$url
Насправді лінія з URL і ім'я файлу, звичайно.