ดาวน์โหลดชุด URL จากบรรทัดคำสั่งแบบมัลติเธรด


3

ฉันมี 100,000 ไฟล์ URL ขนาดเล็กสำหรับดาวน์โหลด ต้องการใช้ 10 เธรดและต้องมีการวางท่อ ฉันเชื่อมผลลัพธ์เป็นไฟล์เดียว แนวทางปัจจุบันคือ:

cat URLS | xargs -P5 -- curl >> OUTPUT

มีตัวเลือกที่ดีกว่าที่จะแสดงความคืบหน้าของการดำเนินการทั้งหมดหรือไม่ จะต้องทำงานจากบรรทัดคำสั่ง


"ต้องการใช้ 10 เธรดและต้องมีการวางท่อฉันต้องต่อผลลัพธ์ให้เป็นหนึ่งไฟล์" ดังนั้นลำดับไม่สำคัญ
— Bobby

1
ใช้GNU ขนานมันก็จะรักษาลำดับของเอาท์พุท หากคุณติดแท็กคำถามของคุณตามนั้นคุณอาจโชคดีและผู้แต่งอาจพูดสอดใน ;-)
— Adrian Frühwirth

การสั่งซื้อไม่ใช่ปัญหา ติดแท็กสำหรับความคิดที่ดีขนาน gnu เป็นไปได้ไหมที่จะใช้แบบขนานและยังได้ค่า pipelining เป็นม้วน?
— William Entriken

คุณไม่ได้รับไฟล์ต่าง ๆ เมื่อคุณทำเช่นนั้น? หากเว็บเซิร์ฟเวอร์ของคุณเป็นแบบเธรดเดียวฉันไม่เห็นว่าคุณจะหลีกเลี่ยงการเขียนสองกระบวนการพร้อมกันในไฟล์เอาต์พุตของคุณได้อย่างไร
— rici

การเดินเล่นเดินเล่นก็ไม่ใช่ปัญหาสำหรับฉัน
— William Entriken

คำตอบ:


3
cat URLS | parallel -k -P10 curl >> OUTPUT

หรือถ้าความก้าวหน้าสำคัญกว่า:

cat URLS | parallel -k -P10 --eta curl >> OUTPUT

หรือ:

cat URLS | parallel -k -P10 --progress curl >> OUTPUT

การติดตั้ง 10 วินาทีจะลองทำการติดตั้งแบบเต็ม หากล้มเหลวการติดตั้งส่วนบุคคล; หากการติดตั้งนั้นล้มเหลว

wget -O - pi.dk/3 | sh

ดูวิดีโอแนะนำสำหรับการแนะนำอย่างรวดเร็ว: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


ฉันได้ลองติดตั้งนี้wget -O - pi.dk/3 | shแต่ดูเหมือนจะได้รับข้ออ้างบางอย่างสำหรับขนานที่ไม่ได้ทำอะไรจริง ๆ :parallel [OPTIONS] command -- arguments / for each argument, run command with argument, in parallel
— William Entriken

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