Чи існує максимум розширення розширення імені файлів (глобулювання) і якщо так, то що це?


11

Чи існує максимум розширення розширення імені файлів (глобулювання) і якщо так, то що це? Див підстановка на tldp.org.

Скажімо, я хочу запустити команду проти підмножини файлів:

grep -e bar foo*
rm -f bar*

Чи є обмеження, на скільки файлів буде розширюватися bash, і якщо так, що це?

Я не шукаю альтернативних способів виконання цих операцій (наприклад, шляхом використання find).



2
Дивіться також: Що визначає максимальний розмір для одного аргументу команди? У сучасних системах Linux існують різні обмеження як для розміру одного аргументу, так і для загального розміру. Останнє залежить від межі розміру стека.
ilkkachu

Відповіді:


17

Не існує обмеження (крім доступної пам'яті) кількості файлів, які можуть бути розширені bashглобусом.

Однак, коли ці файли передаються як аргументи команді, яка виконується (на відміну від вбудованої оболонки або функції), ви можете стикатися з обмеженням execve()системного виклику в деяких системах. У більшості систем цей системний виклик має обмеження на сукупний розмір аргументів та середовища, що передаються йому, а в Linux також окремий ліміт на розмір одного аргументу.

Докладніше див:

Щоб подолати цю межу, ви можете використовувати (припускаючи GNU xargsабо сумісний):

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

Зверху, оскільки printfвбудований ( bashі в більшості подібних до Борна снарядів), ми не досягаємо execve()межі. І xargsрозділить список аргументів на стільки rmвикликів, скільки потрібно, щоб уникнути execve()обмеження.

З zsh:

autoload zargs
zargs foo* -- rm -f

З ksh93:

command -x rm -f foo*

7

Обмеження загального розміру аргументів можна побачити за допомогою:

getconf ARG_MAX

Це визначається, як правило, не оболонкою, а базовою операційною системою відповідно до цієї відповіді .


2
Я думаю, що це загальна довжина, а не кількість?
ilkkachu

1
Ви, звичайно, правильні; Я оновив свою відповідь, щоб це відобразити. Через це обмеження кількості аргументів буде функцією тривалості аргументів.
DopeGhoti
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.