วิธี wget ไฟล์ที่มีชื่อที่ถูกต้องเมื่อเปลี่ยนเส้นทาง?


117

ดังนั้นหลังจากการค้นหาใน Google และ Super User (และการสแกนหน้าคน) ฉันไม่สามารถหาคำตอบสำหรับสิ่งที่ (ฉันคิดว่า) น่าจะง่าย:

ถ้าคุณไปที่นี่:

http://www.vim.org/scripts/script.php?script_id=2340

และลองดาวน์โหลดธีม:

http://www.vim.org/scripts/download_script.php?src_id=9750

ชอบมาก

wget http://www.vim.org/scripts/download_script.php?src_id=9750

download_script.php?src_id=9750คุณอาจจะจบลงด้วยไฟล์ที่เรียกว่า

แต่ฉันต้องการให้มันถูกเรียกmolokai.vimซึ่งเป็นสิ่งที่จะเกิดขึ้นถ้าฉันใช้เบราว์เซอร์เพื่อดาวน์โหลดไฟล์นี้

ฉันต้องระบุตัวเลือกใดเพื่อรับผลที่ต้องการ

ฉันก็จะโอเคกับคำสั่งเทียบเท่า Curl

คำตอบ:


162
-O file
--output-document=file

เอกสารจะไม่ถูกเขียนลงในไฟล์ที่เหมาะสม แต่ทั้งหมดจะถูกรวมเข้าด้วยกันและเขียนลงในไฟล์ หาก-ใช้เป็นไฟล์เอกสารจะถูกพิมพ์ไปยังเอาต์พุตมาตรฐานปิดการใช้งานการแปลงลิงค์ (ใช้./-เพื่อพิมพ์ไปยังไฟล์ที่มีชื่ออย่างแท้จริง-.)

ดังนั้น,

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

หรือคุณอาจสามารถwgetทำสิ่งนี้ได้โดยใช้ตัวเลือก - เนื้อหาการจัดการหากเวอร์ชั่นของคุณรองรับ

wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=9750

Caveats ตามหน้าคน

--content-disposition

หากนี่เป็นเปิดการสนับสนุน (ไม่ทำงานอย่างเต็มที่) การทดลองสำหรับส่วนหัว "เนื้อหา - การจัดการ" เปิดใช้งาน ขณะนี้อาจส่งผลให้มีการส่งไปกลับไปยังเซิร์ฟเวอร์เพิ่มเติมสำหรับคำขอ "HEAD" และเป็นที่ทราบกันดีว่ามีข้อผิดพลาดเล็กน้อยซึ่งเป็นสาเหตุที่ไม่ได้เปิดใช้งานตามค่าเริ่มต้นในปัจจุบัน

ตัวเลือกนี้มีประโยชน์สำหรับบางโปรแกรมที่ดาวน์โหลดไฟล์ CGI ที่ใช้ส่วนหัว "เนื้อหา - การจำหน่าย" เพื่ออธิบายชื่อของไฟล์ที่ดาวน์โหลด

คุณสามารถบรรลุพฤติกรรมอัตโนมัติแบบเดียวกันกับที่curlใช้

curl -JLO http://www.vim.org/scripts/download_script.php?src_id=9750

-Oใช้ชื่อรีโมตและ-Jบังคับ-Oให้รับชื่อนั้นจากส่วนหัว content-disposition แทน URL และ-Lติดตามการเปลี่ยนเส้นทางถ้าจำเป็น


2
ฉันควรระบุว่าสิ่งนี้จะต้องเป็นไปโดยอัตโนมัติ
audio.zoom

ตามที่ฉันเข้าใจแล้ว wget อาศัยหน้าเว็บเพื่อแจ้งอย่างถูกต้องหาก URL ชี้ไปที่ไฟล์และจำเป็นต้องบันทึกด้วยสิ่งต่าง ๆ โดยใช้ส่วนหัวการจัดการเนื้อหาซึ่ง wget อาจสนับสนุนอย่างเต็มที่หรืออาจไม่สมบูรณ์ ดังนั้นคุณไม่สามารถทำได้โดยอัตโนมัติด้วย wget Curl อาจประสบความสำเร็จไม่มากก็น้อยขึ้นอยู่กับหน้าเว็บ
EightBitTony

ประเด็นคือสามารถสคริปต์สิ่งเหล่านี้โดยไม่มีการแยกวิเคราะห์ที่ซับซ้อน curl ก็ดี แต่จนถึงตอนนี้ฉันยังไม่สามารถรวบรวมตัวเลือกที่เหมาะสมสำหรับสิ่งนั้น
audio.zoom

2
Aha - ฉันผิดดูคำตอบที่ปรับปรุงแล้ว นี่คือเหตุผลที่เว็บไซต์ stackexchange ทำงานได้ดี - ทุกคนเรียนรู้บางสิ่งแม้แต่คนที่ตอบคำถาม!
EightBitTony

1
สิ่งนี้ใช้ได้กับฉันสำหรับพ็อดแคสต์การแลกเปลี่ยนทางอากาศซึ่งใช้เวลานานในการติดตามฉัน ขอบคุณ
Richard Campbell

75

ด้วย wget คุณสามารถทำสิ่งนี้:

wget --trust-server-names <url> 

เพื่อบันทึกไฟล์โดยใช้ชื่อไฟล์ล่าสุดที่เซิร์ฟเวอร์มอบให้


2
ฉันสงสัยว่าความแตกต่างระหว่าง--trust-server-namesและ--content-disposition
JamesTheAwesomeDude

3
ดูเหมือนว่าการ--trust-server-namesเปลี่ยนเส้นทางไปยังไฟล์อื่นดังต่อไปนี้และ--content-dispositionตั้งชื่อไฟล์ด้วยชื่อที่ระบุในส่วนหัวการตอบกลับโดยไม่ต้องเปลี่ยนเส้นทางใด ๆ
Asfand Qazi

1
เหตุใดจึงไม่ใช้ฟังก์ชันเริ่มต้นนี้!
hopeeekr

8
@hopeseekr เซิร์ฟเวอร์อาจซุกซนและเรียกไฟล์. bashrc หากคุณไม่ได้ดูอย่างระมัดระวัง lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Patrick Conheady



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.