ฉันมีปัญหาการเขียนสคริปต์เชลล์ซึ่งฉันได้รับไดเรกทอรีที่เต็มไปด้วยไฟล์อินพุต (ไฟล์แต่ละไฟล์มีหลายบรรทัดอินพุต) และฉันจำเป็นต้องประมวลผลเป็นรายบุคคลโดยเปลี่ยนเส้นทางผลลัพธ์แต่ละไฟล์ไปเป็นไฟล์ที่ไม่ซ้ำกัน (aka, file_1.input ที่จะถูกจับใน file_1.output และอื่น ๆ )
พรีขนานฉันจะทำซ้ำแต่ละไฟล์ในไดเรกทอรีและดำเนินการคำสั่งของฉันในขณะที่ทำเทคนิคการจับเวลา / การเรียงลำดับบางอย่างเพื่อไม่เอาชนะโปรเซสเซอร์ (สมมติว่าแต่ละกระบวนการมีรันไทม์คงที่) อย่างไรก็ตามฉันรู้ว่ามันไม่ได้เป็นอย่างนั้นเสมอไปดังนั้นการใช้ "แบบขนาน" อย่างโซลูชันดูเหมือนจะเป็นวิธีที่ดีที่สุดในการรับเชลล์สคริปต์แบบมัลติเธรดโดยไม่ต้องเขียนโค้ดที่กำหนดเอง
ในขณะที่ฉันคิดว่าจะใช้วิธีใดวิธีหนึ่งในการจัดการไฟล์เหล่านี้ (และทำให้ฉันสามารถจัดการคอร์ได้อย่างมีประสิทธิภาพ) พวกเขาทั้งหมดดูเหมือนแฮ็ค ฉันมีสิ่งที่ฉันคิดว่าเป็นกรณีการใช้งานที่ค่อนข้างง่ายดังนั้นฉันต้องการให้มันสะอาดที่สุดเท่าที่จะเป็นไปได้
ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม!
ตัวอย่างไดเรกทอรีอินพุต:
> ls -l input_files/
total 13355
location1.txt
location2.txt
location3.txt
location4.txt
location5.txt
สคริปต์:
> cat proces_script.sh
#!/bin/sh
customScript -c 33 -I -file [inputFile] -a -v 55 > [outputFile]
อัปเดต : หลังจากอ่านคำตอบของ Ole ด้านล่างฉันสามารถรวบรวมชิ้นส่วนที่หายไปสำหรับการใช้งานแบบขนานของฉันเอง ในขณะที่คำตอบของเขานั้นยอดเยี่ยมนี่คืองานวิจัยเพิ่มเติมและบันทึกของฉันที่ฉันได้:
แทนที่จะใช้กระบวนการทั้งหมดของฉันฉันคิดว่าจะเริ่มต้นด้วยหลักฐานคำสั่งแนวคิดเพื่อพิสูจน์วิธีแก้ปัญหาของเขาในสภาพแวดล้อมของฉัน ดูการใช้งานที่แตกต่างกันสองแบบของฉัน (และบันทึก):
find /home/me/input_files -type f -name *.txt | parallel cat /home/me/input_files/{} '>' /home/me/output_files/{.}.out
ใช้การค้นหา (ไม่ใช่ ls ซึ่งอาจทำให้เกิดปัญหา) เพื่อค้นหาไฟล์ที่เกี่ยวข้องทั้งหมดภายในไดเรกทอรีไฟล์อินพุตของฉันแล้วเปลี่ยนเส้นทางเนื้อหาไปยังไดเรกทอรีและไฟล์แยกต่างหาก ปัญหาของฉันจากด้านบนคือการอ่านและเปลี่ยนเส้นทาง (สคริปต์จริงง่ายมาก) ดังนั้นการแทนที่สคริปต์ด้วย cat จึงเป็นการพิสูจน์แนวคิดที่ดี
parallel cat '>' /home/me/output_files/{.}.out ::: /home/me/input_files/*
โซลูชันที่สองนี้ใช้กระบวนทัศน์ตัวแปรอินพุตของขนานเพื่ออ่านไฟล์ในอย่างไรก็ตามสำหรับมือใหม่สิ่งนี้ทำให้เกิดความสับสนมากขึ้น สำหรับฉันแล้วการใช้ find a และ pipe นั้นตรงกับความต้องการของฉัน