ดาวน์โหลดชุด 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.