Bir bash
glob tarafından genişletilebilecek dosya sayısında bir sınırlama (kullanılabilir bellek dışında) yoktur .
Ancak, bu dosyalar yürütülen bir komuta argümanlar olarak iletildiğinde (kabuk yerleşimi veya işlevinin aksine), execve()
bazı sistemlerde sistem çağrısının bir sınırıyla karşılaşabilirsiniz . Çoğu sistemde, bu sistem çağrısının kendisine iletilen argümanların ve ortamın kümülatif boyutu üzerinde bir sınırı vardır ve Linux'ta da tek bir argümanın boyutu üzerinde ayrı bir sınır vardır.
Daha fazla ayrıntı için bkz:
Bu sınırı aşmak için şunları kullanabilirsiniz (GNU xargs
veya uyumlu olduğu varsayılarak ):
printf '%s\0' foo* | xargs -r0 rm -f
Yukarıda, printf
yerleşik ( bash
Bourne benzeri kabuklarda ve çoğu kabukta) olduğu için execve()
sınıra ulaşmıyoruz. Ve xargs
argüman listesini sınırlamayı rm
önlemek için gereken sayıda çağrıyı böler execve()
.
İle zsh
:
autoload zargs
zargs foo* -- rm -f
İle ksh93
:
command -x rm -f foo*