Ini terutama tergantung pada versi kernel Linux Anda.
Anda harus dapat melihat batas untuk sistem Anda dengan menjalankan
getconf ARG_MAX
yang memberitahu Anda jumlah byte maksimum yang bisa dimiliki oleh baris perintah setelah diperluas oleh shell.
Di Linux <2.6.23, batasnya biasanya 128 KB.
Di Linux> = 2.6.25, batasnya adalah 128 KB, atau 1/4 dari ukuran tumpukan Anda (lihat ulimit -s), mana yang lebih besar.
Lihat halaman manual execve (2) untuk semua detailnya.
Sayangnya, perpipaan ls *.txttidak akan memperbaiki masalah, karena batasnya ada di sistem operasi, bukan shell.
Shell memperluas *.txt, lalu mencoba menelepon
exec("ls", "a.txt", "b.txt", ...)
dan Anda memiliki banyak file yang cocok *.txtsehingga Anda melebihi batas 128 KB.
Anda harus melakukan sesuatu seperti
find . -maxdepth 1 -name "*.txt" | wc -l
sebagai gantinya.
(Dan lihat komentar Shawn J. Goff di bawah ini tentang nama file yang berisi baris baru.)
ls, yang merupakan ide yang buruk, jadi lebih baik menghindarinya. Untuk menghitung lihat Apa cara terbaik untuk menghitung jumlah file dalam direktori? , untuk solusi yang rumit, lihat mengapa loop tidak menimbulkan kesalahan "argumen terlalu lama"? .