Apakah ada maksimal untuk ekspansi nama file bash (globbing) dan jika demikian, apakah itu? Lihat globbing di tldp.org.
Katakanlah saya ingin menjalankan perintah terhadap subset file:
grep -e bar foo*
rm -f bar*
Apakah ada batasan berapa banyak file yang akan diperluas bash, dan jika ya, apa itu?
Saya tidak mencari cara alternatif untuk melakukan operasi tersebut (misalnya dengan menggunakan find
).
bash
wildcards
bash-expansion
Thomas
sumber
sumber
Jawaban:
Tidak ada batasan (selain memori yang tersedia) untuk jumlah file yang dapat diperluas oleh
bash
glob.Namun ketika file-file itu dilewatkan sebagai argumen untuk perintah yang dieksekusi (sebagai lawan dari builtin shell atau fungsi), maka Anda dapat mengalami batas
execve()
panggilan sistem pada beberapa sistem. Pada kebanyakan sistem, pemanggilan sistem itu memiliki batasan ukuran kumulatif argumen dan lingkungan yang diteruskan ke sana, dan di Linux juga ada batasan terpisah pada ukuran argumen tunggal.Untuk detail lebih lanjut, lihat:
Untuk mengatasi batas itu, Anda dapat menggunakan (dengan asumsi GNU
xargs
atau kompatibel):Di atas, karena
printf
built-in (dibash
dan sebagian besar shell Bourne-like), kami tidak mencapaiexecve()
batasnya. Danxargs
akan membagi daftar argumen menjadirm
doa sebanyak yang diperlukan untuk menghindariexecve()
batasan.Dengan
zsh
:Dengan
ksh93
:sumber
Anda dapat melihat batas ukuran total argumen dengan:
Ini ditentukan umumnya bukan oleh shell, tetapi oleh sistem operasi yang mendasarinya sesuai dengan jawaban ini .
sumber