โดยค่าเริ่มต้น 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, whitespace, ชื่อไฟล์ (เช่นhttp://url1/blah&blah=whatever some.pdf
จากนั้นใช้เหมือนข้างบนแทนที่ wget line ด้วย./thatscript.sh $url
ในกรณี$url
นี้จริง ๆ แล้วเป็นบรรทัดที่มี url และชื่อไฟล์แน่นอน