Temel olarak Linux çekirdeğinin sürümüne bağlıdır.
Sisteminizin sınırını çalıştırarak görebilmeniz gerekir.
getconf ARG_MAX
Bu, size bir komut satırının kabuk tarafından genişletildikten sonra sahip olabileceği maksimum bayt sayısını gösterir.
Linux <2.6.23'te sınır genellikle 128 KB'dir.
Linux> = 2.6.25'te sınır ulimit -s
, hangisi daha büyükse, 128 KB veya yığın boyutunuzun 1 / 4'ü (bkz ).
Tüm detaylar için execve (2) man sayfasına bakın.
Maalesef, boru hattı ls *.txt
sorunu çözmeyecek, çünkü sınır kabukta değil işletim sisteminde.
Kabuk genişler *.txt
, sonra aramaya çalışır.
exec("ls", "a.txt", "b.txt", ...)
ve *.txt
128 KB sınırını aştığınız kadar eşleşen çok sayıda dosyanız var .
Gibi bir şey yapmak zorunda kalacaksın
find . -maxdepth 1 -name "*.txt" | wc -l
yerine.
(Ayrıca bkz. Shawn J. Goff'un yeni satırlar içeren dosya adları hakkındaki yorumları.)
ls
çıktısını sayar , ki bu kötü bir fikirdir, bundan kaçının. Sayma için bkz. Dizindeki dosya sayısını saymanın en iyi yolu nedir? , zor bir geçici çözüm için neden döngünün "argüman çok uzun" hatası vermedi? .