คำถามติดแท็ก xargs

xargs เป็นคำสั่งที่เรียกใช้งานคำสั่งอื่นและสร้างอาร์กิวเมนต์จาก stdin

3
แก้ไขการใช้ xargs แบบขนาน
ฉันใช้xargsโทรสคริปต์ไพ ธ อนเพื่อประมวลผลไฟล์ขนาดเล็กประมาณ 30 ล้านไฟล์ ฉันหวังว่าจะใช้xargsเพื่อขนานกระบวนการ คำสั่งที่ฉันใช้คือ: find ./data -name "*.json" -print0 | xargs -0 -I{} -P 40 python Convert.py {} > log.txt โดยทั่วไปConvert.pyจะอ่านในไฟล์jsonขนาดเล็ก(4kb) ทำการประมวลผลและเขียนไปยังไฟล์ 4kb อื่น ฉันกำลังทำงานบนเซิร์ฟเวอร์ที่มี 40 คอร์ CPU และไม่มีกระบวนการอื่นที่ใช้งาน CPU สูงบนเซิร์ฟเวอร์นี้ จากการตรวจสอบ htop (btw มีวิธีอื่นที่ดีในการตรวจสอบประสิทธิภาพของ CPU หรือไม่) ฉันพบว่า-P 40ไม่เร็วเท่าที่ควร บางครั้งแกนทั้งหมดจะหยุดและลดลงจนเกือบเป็นศูนย์ประมาณ 3-4 วินาทีจากนั้นจะฟื้นตัวเป็น 60-70% จากนั้นฉันพยายามลดจำนวนกระบวนการแบบขนานเป็น-P 20-30แต่ก็ยังไม่เร็วมาก พฤติกรรมในอุดมคติควรเป็นแบบความเร็วเชิงเส้น มีข้อเสนอแนะใด …

2
ย้ายไฟล์ด้วย find + xargs: เป้าหมายไม่ใช่ไดเรกทอรีใช่หรือไม่
เมื่อฉันเรียกใช้คำสั่งต่อไปนี้: > mkdir some_dir > find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir ฉันได้รับหลายร้อยบรรทัดที่พูดว่า: mv: target `/foo/bar/XX.csv` is not a directory ทำไม? ฉันคิดว่า xargs จะทำงาน: mv /foo/barXX.csv some_dir สำหรับทุกไฟล์ที่findพบ เกิดอะไรขึ้น? โดยวิธีนี้เป็นกับ zsh ปรับปรุง: Update1: ฉันเหนื่อย: find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir …
9 find  xargs 

3
ส่งอาร์กิวเมนต์ xargs เป็นสตริงไปยังคำสั่งอื่นด้วย '>'
/tmp/สมมติว่าฉันมีพวงของไฟล์ใน ฉันทำ find . -type f | xargs -iFILES และฉันต้องการที่จะทำmd5sumในแต่ละไฟล์ส่งออกไปยังไฟล์ที่มีชื่อเดียวกัน แต่มี.md5นามสกุล find . -type f | xargs -iFILES md5sum FILES > FILES.md5 นี่ควรจะสร้างไฟล์ md5 สำหรับแต่ละไฟล์ที่พบโดยคำสั่ง find แต่จะสร้างไฟล์ FILES.md5 ไฟล์เดียวบนดิสก์ที่มี checksums จากไฟล์ทั้งหมด ฉันจะบอกคำสั่ง md5sum ได้อย่างไรว่า FILES เป็นตัวแทนของชื่อไฟล์ปัจจุบันและไม่ใช่สตริงตัวอักษร FILES
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.