ดาวน์โหลดไฟล์หลาย ๆ ไฟล์พร้อมกับซิงก์รั้ง


17

ฉันพยายามดาวน์โหลดสองไฟล์โดยใช้ไวยากรณ์ต่อไปนี้:

curl -O http://domain/path/to/{file1,file2}

ปัญหาคือมีเพียงไฟล์แรกเท่านั้นที่ถูกบันทึกไว้ในเครื่องจริงและไฟล์ที่สองถูกพิมพ์เป็น stdout

ฉันรู้ว่าถ้าฉันเพิ่ม-Oมันทำงานได้ดี:

curl -OO http://domain/path/to/{file1,file2}

แต่นี่ไม่ได้ผลถ้าจำนวนไฟล์เติบโตมากเกินไป? ตัวอย่างเช่น,

curl -O http://domain/path/to/file[1,100]

คำถามของฉันคือไม่มีวิธีดาวน์โหลดหลายไฟล์พร้อมกันหรือไม่ curl (โดยไม่ต้องเพิ่มจำนวนที่ถูกต้อง-O) หรือไม่?


1
ทำไมไม่ใช้ลูป for หรือใช้ wget แทน?
Rui F Ribeiro

1
@RuiFRibeiro (1) ใช่ฉันสามารถใช้ลูป ฉันแค่อยากรู้อยากเห็นถ้าcurlสามารถทำได้ (2) ฉันกำลังพิจารณาไม่เพียง HTTP, โปรโตคอล FTP, เช่น SFTP
Naitree

ฉันหมายถึงการเป็นเครื่องมือที่ทรงพลังทำไมcurlมันล้มเหลวในการทำงานที่ไม่ยาก
Naitree

1
เพียงเพื่อให้ชัดเจนว่า{}และ[](และยัง*และ?) ไวยากรณ์เป็นเปลือกกลม / ขยายตัวcurlไม่เคยเห็นพวกเขามันเป็นเช่นเดียวกับcurl url1 url2
vonbrand

wget ไม่จัดการ SSL
MikeW

คำตอบ:


9

อัปเดต:มีการใช้งานใน curl 7.19.0 ดูคำตอบ @Besworks

ตามหน้า man นั้นไม่มีทางที่จะเก็บชื่อไฟล์ดั้งเดิมยกเว้นการใช้หลาย O หรือคุณสามารถใช้ชื่อไฟล์ของคุณเอง:

curl http://{one,two}.site.com -o "file_#1.txt"

ส่งผลให้http://one.site.comถูกบันทึกfile_one.txtและhttp://two.site.comfile_two.txtถูกบันทึกไว้ใน

หรือแม้กระทั่งหลายตัวแปรเช่น

curl http://{site,host}.host[1-5].com -o "#1_#2"

มีผลในการhttp://site.host1.comที่จะถูกบันทึกไว้ในsite_1, http://host.host1.comถูกบันทึกไว้ในhost_1และอื่น ๆ


หรือคุณสามารถทำอะไรเช่นcurl -$(printf 'O%.0s' {1..3}) http://domain/path/to/{file1,file2,file3}
Max Coplan

23

ฉันรู้ว่ามีคำตอบที่ยอมรับแล้วสำหรับคำถามนี้ แต่ฉันรู้สึกว่าฉันควรชี้ให้เห็นว่าจริง ๆ แล้วมีวิธีการทำเช่นนี้

--remote-name-allตัวเลือกบอกขดประพฤติเช่นถ้าคุณใช้-Oหรือ--remote-nameสำหรับแต่ละไฟล์

https://curl.haxx.se/docs/manpage.html#--remote-name-all

ตัวเลือกนี้มีให้ใช้ตั้งแต่รุ่น 7.19.0

https://curl.haxx.se/changes.html#7_19_0


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