ฉันต้องสามารถเรียงลำดับเอาต์พุตตามตัวอักษรfind
ก่อนที่จะไพพ์ไปยังคำสั่ง การเข้า| sort |
ระหว่างไม่ทำงานฉันควรทำอย่างไร
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
ฉันต้องสามารถเรียงลำดับเอาต์พุตตามตัวอักษรfind
ก่อนที่จะไพพ์ไปยังคำสั่ง การเข้า| sort |
ระหว่างไม่ทำงานฉันควรทำอย่างไร
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
คำตอบ:
ใช้find
ตามปกติและคั่นเส้นของคุณด้วย NUL GNU sort
สามารถจัดการสิ่งเหล่านี้ได้ด้วยสวิตช์ -z:
find . -print0 | sort -z | xargs -r0 yourcommand
บางรุ่นsort
มี-z
ตัวเลือกซึ่งอนุญาตสำหรับการบันทึกที่สิ้นสุดด้วยค่า null
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
นอกจากนี้คุณยังสามารถเขียนสคริปต์ระดับสูงเพื่อทำ:
find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand
เพิ่ม-r
ตัวเลือกเพื่อxargs
ให้แน่ใจว่าmyCommand
มีการเรียกพร้อมอาร์กิวเมนต์
-t \0
ตัวเลือกสำหรับการเรียงลำดับ (ซึ่งเป็น-z
คำพ้องความหมาย)
|sort
วิธีแก้ไขปัญหาทั้งหมดนี้คือคุณไม่สามารถใช้งาน-exec
ได้อีกต่อไป ตกลงแม้ว่ามันจะเป็นไปได้ที่จะเขียนคำสั่งของคุณเพื่อ-exec
ให้มันทำงานได้xargs
แต่คำถามคือ"มินิสคริปต์"คืออะไร? ( sh -c ...
) ฉันจะไม่เรียกสิ่งนั้นว่าน่าสนใจในการแปลงมินิสคริปต์ 'sh -c' ที่มีหลายคำสั่งเพื่อให้สามารถทำงานกับxargs
(ถ้าเป็นไปได้นั่นคือ)
printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x
ฉันคิดว่าคุณต้องการ-n
ธงสำหรับการเรียงลำดับ #
ตามประเภทคน:
-n, --numeric-sort
compare according to string numerical value
แก้ไข
print0 อาจมีบางอย่างเกี่ยวกับสิ่งนี้ฉันเพิ่งทดสอบมัน นำ print0 ออกมาคุณสามารถยกเลิกสตริงในการเรียงลำดับโดยใช้-z
แฟล็ก
print0
ดูเหมือนว่าจะเป็นการแยกช่องว่างชื่อไฟล์ซึ่งเป็นสิ่งที่ฉันต้องส่งต่อคำสั่งของฉันโชคไม่ดี
หากคุณติดตั้งGNU Parallel http://www.gnu.org/software/parallel/คุณสามารถทำสิ่งนี้ได้:
find folder1 folder2 -name "*.txt" -print |
sort |
parallel myCommand
คุณสามารถติดตั้ง GNU Parallel ได้ง่ายๆโดย:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
ดูวิดีโอแนะนำสำหรับ GNU Parallel เพื่อเรียนรู้เพิ่มเติม: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
.
แตกต่างกัน ... เมื่อsort
มันจบลงในตอนท้ายของรายการ ... โดยpython
เรียงลำดับขึ้นไปด้านบน (อาจจะเป็นภาษาไพ ธ อนLC_COLLATE=C
)