Theo mặc định, wget ghi vào một tệp có tên là thành phần cuối cùng của URL mà bạn chuyển đến nó. Nhiều máy chủ chuyển hướng URL như http://www.url1.com/app?q=123&gibb=erish&gar=ble
một URL khác với tên tệp trông đẹp mắt như thế nào http://download.url1.com/files/something.pdf
. Bạn có thể yêu cầu wget sử dụng tên từ URL được chuyển hướng (nghĩa là something.pdf
) thay vì app?q=123&gibb=erish&gar=ble
chuyển --trust-server-names
tùy chọn. Đây không phải là chế độ mặc định bởi vì, nếu sử dụng bất cẩn, nó có thể dẫn đến ghi đè tên tệp không thể đoán trước trong thư mục hiện tại; nhưng nếu bạn tin tưởng máy chủ hoặc đang làm việc trong một thư mục không chứa các tệp quý giá khác, --trust-server-names
thì đó thường là điều đúng đắn để sử dụng.
Một số máy chủ sử dụng Content-Disposition
tiêu đề thay vì chuyển hướng để chỉ định tên tệp. Vượt qua --content-disposition
tùy chọn để làm cho wget sử dụng tên tệp này.
Như vậy:
wget --content-disposition --trust-server-names -i list_of_urls
Nếu bạn vẫn không nhận được tên tệp trông đẹp mắt, bạn có thể muốn chỉ định tên riêng của mình. Giả sử bạn có một tệp chứa các dòng như
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
Để làm cho wget tải các tệp vào tên tệp đã chỉ định, giả sử không có ký tự khoảng trắng trong URL hoặc trong tên tệp:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
Các err
biến chứa 0 nếu tất cả các tải thành công và 1 nếu không, bạn có thể return $err
nếu bạn đặt đoạn mã này trong một hàm hoặc exit $err
nếu bạn đặt đoạn mã này trong một chuỗi.
Nếu bạn không muốn chỉ định bất kỳ thứ gì ngoài URL và bạn không thể nhận được tên đẹp từ máy chủ, bạn có thể đoán loại tệp và cố gắng nhận được ít nhất các tiện ích mở rộng có ý nghĩa.
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
Thêm các loại khác như mong muốn. Nếu file
lệnh của bạn không có -m
tùy chọn, hãy bỏ qua nó và kiểm tra xem file
trả về hệ thống nào cho các loại tệp bạn quan tâm. Nếu bạn có tệp /etc/mime.types
trên hệ thống của mình, bạn có thể đọc các liên kết của các loại MIME cho các tiện ích mở rộng từ nó thay vì cung cấp danh sách của riêng bạn:
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
. Trong tập tin list_of_urls, làm cho mỗi dòng một url, khoảng trắng, một tên tập tin (ví dụhttp://url1/blah&blah=whatever some.pdf
Sau đó sử dụng tương tự như trên, thay thế cho dòng wget với../thatscript.sh $url
Trong trường hợp này.$url
Thực sự là một phù hợp với một url và một tên tập tin, tất nhiên.