บันทึกไฟล์ไปยังโฟลเดอร์เฉพาะด้วยคำสั่ง curl


182

ในเชลล์สคริปต์ฉันต้องการดาวน์โหลดไฟล์จากบาง URL และบันทึกลงในโฟลเดอร์เฉพาะ อะไรคือการตั้งค่าสถานะ CLI เฉพาะที่ฉันควรใช้เพื่อดาวน์โหลดไฟล์ไปยังโฟลเดอร์เฉพาะด้วยcurlคำสั่งหรือฉันจะได้รับผลลัพธ์นั้นได้อย่างไร?


มันจะดูเหมือนว่าทุบตีการเขียนโปรแกรมการเขียนโปรแกรม ...
rjurney

คำตอบ:


281

ฉันไม่คิดว่าคุณสามารถให้เส้นทางไปยังม้วนงอ แต่คุณสามารถซีดีไปยังตำแหน่งดาวน์โหลดและซีดีกลับ

cd target/path && { curl -O URL ; cd -; }

หรือใช้เชลล์ย่อย

(cd target/path && curl -O URL)

ทั้งสองวิธีจะดาวน์โหลดก็ต่อเมื่อมีเส้นทางอยู่ -Oเก็บชื่อไฟล์ระยะไกล หลังจากดาวน์โหลดแล้วจะกลับสู่ตำแหน่งเดิม

หากคุณต้องการตั้งชื่อไฟล์อย่างชัดเจนคุณสามารถใช้-oตัวเลือกขนาดเล็ก:

curl -o target/path/filename URL

2
ฉันมีคำสั่งนี้: curl -LOk basename /packages" github.com/ziyaddin/xampp/archive/master.zip " แต่มันบอกว่าชื่อไฟล์ผิด ->basename /packages
Ziyaddin Sadigov

10
คุณสามารถใช้ subshell ได้เช่นกัน:(cd target/path; curl -O URL)
Ehtesh Choudhury

9
ความแตกต่างระหว่างสองคืออะไร? แผ่นแรกซีดีลงในไดเรกทอรีและดาวน์โหลดไฟล์จากนั้นซีดีออก ที่สองอยู่ในไดเรกทอรีปัจจุบันและหยิกไฟล์ไปยังตำแหน่งที่ระบุ อย่างที่สองดูเหมือนง่ายกว่า
Henry Zhu

9
@HenryZhu ในไฟล์แรกชื่อไฟล์นั้นได้มาจากชื่อของไฟล์บนเซิร์ฟเวอร์ ในวินาทีที่คุณกำลังเปลี่ยนชื่อเนื้อหาที่คุณดาวน์โหลดเป็นชื่อที่คุณให้
turtlemonvh

4
ฉันต้องการตัวเลือกในการระบุไดเรกทอรี แต่ใช้ชื่อไฟล์ของเซิร์ฟเวอร์ ดูเหมือนว่าการใช้งานcdเป็นตัวเลือกที่ดีที่สุดในขณะนี้ แต่ดูเหมือนจะไม่ค่อยเหมาะสม
StockB

4

curlไม่มีตัวเลือกสำหรับสิ่งนั้น (โดยไม่ต้องระบุชื่อไฟล์) wgetด้วย ไดเรกทอรีสามารถเป็นญาติหรือแน่นอน นอกจากนี้ไดเรกทอรีจะถูกสร้างขึ้นโดยอัตโนมัติหากไม่มีอยู่

wget -P relative/dir "$url"

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