Bash dosya adı genişletme (globbing) için maksimum var mı ve varsa, nedir?


12

Bash dosya adı genişletme (globbing) için maksimum var mı ve varsa, nedir? Bkz. Tldp.org'daki globbing .

Diyelim ki bir dosya alt kümesine karşı bir komut çalıştırmak istiyorum:

grep -e bar foo*
rm -f bar*

Bash'ın kaç dosyaya genişleyeceğine dair bir sınırlama var mı?

Bu işlemleri gerçekleştirmek için alternatif yollar aramıyorum (örn. Kullanarak find).



2
Ayrıca bkz: Tek bir komut argümanı için maksimum boyutu ne tanımlar? Mevcut Linux sistemlerinde, tek bir bağımsız değişkenin boyutu ve toplam boyut için farklı sınırlar vardır. İkincisi, yığın boyutu sınırına bağlıdır.
ilkkachu

Yanıtlar:


17

Bir bashglob 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 xargsveya uyumlu olduğu varsayılarak ):

printf '%s\0' foo* | xargs -r0 rm -f

Yukarıda, printfyerleşik ( bashBourne benzeri kabuklarda ve çoğu kabukta) olduğu için execve()sınıra ulaşmıyoruz. Ve xargsargü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*

7

Bağımsız değişkenlerin toplam boyutunun sınırını aşağıdakilerle görebilirsiniz:

getconf ARG_MAX

Bu genellikle kabuk tarafından değil, bu cevaba göre altta yatan işletim sistemi tarafından belirlenir .


2
Sanırım toplam uzunluk değil, sayı değil mi?
ilkkachu

1
Sen tabi ki doğrusun; Cevabımı bunu yansıtacak şekilde güncelledim. Bu nedenle, bağımsız değişken sayısının sınırı, bağımsız değişkenlerin uzunluğunun bir işlevi olacaktır .
DopeGhoti
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.