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 *.txt
tidak 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 *.txt
sehingga 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"? .