ขึ้นอยู่กับเคอร์เนลเวอร์ชันของคุณเป็นหลัก
คุณควรจะเห็นขีด จำกัด ของระบบของคุณโดยการเรียกใช้
getconf ARG_MAX
ซึ่งบอกจำนวนสูงสุดของไบต์ที่บรรทัดคำสั่งสามารถมีได้หลังจากที่ถูกขยายโดยเชลล์
ใน Linux <2.6.23 ขีด จำกัด มักเป็น 128 KB
ใน Linux> = 2.6.25 ขีด จำกัด คือ 128 KB หรือ 1/4 ของขนาดสแต็กของคุณ (ดูulimit -s
) แล้วแต่จำนวนใดจะใหญ่กว่า
ดูรายละเอียดทั้งหมดได้จากman page execve (2)
น่าเสียดายที่การวางท่อls *.txt
จะไม่สามารถแก้ไขปัญหาได้เนื่องจากขีด จำกัด อยู่ในระบบปฏิบัติการไม่ใช่เชลล์
เชลล์ขยายตัว*.txt
แล้วพยายามโทรออก
exec("ls", "a.txt", "b.txt", ...)
และคุณมีไฟล์จำนวนมากที่ตรงกับ*.txt
ที่คุณเกินขีด จำกัด 128 KB
คุณจะต้องทำอะไรบางอย่างเช่น
find . -maxdepth 1 -name "*.txt" | wc -l
แทน.
(และดูความคิดเห็นของ Shawn J. Goff ด้านล่างเกี่ยวกับชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่)
ls
ซึ่งเป็นความคิดที่ไม่ดีดังนั้นควรหลีกเลี่ยง สำหรับการนับดูวิธีที่ดีที่สุดในการนับจำนวนไฟล์ในไดเรกทอรีคืออะไร สำหรับวิธีแก้ปัญหาที่ยุ่งยากดูว่าทำไมการวนซ้ำจึงไม่ทำให้เกิดข้อผิดพลาด“ การโต้แย้งยาวเกินไป” .