Существует ли максимум для расширения имени файла (глобация), и если да, то что это? См подстановка на tldp.org.
Допустим, я хочу запустить команду для подмножества файлов:
grep -e bar foo*
rm -f bar*
Существует ли ограничение на количество файлов, на которые распространяется bash, и если да, то что это?
Я не ищу альтернативных способов выполнения этих операций (например, с помощью find
).
bash
wildcards
bash-expansion
Томас
источник
источник
Ответы:
Нет ограничений (кроме доступной памяти) на количество файлов, которые могут быть расширены
bash
глобусом.Однако , когда эти файлы передаются в качестве аргументов команды, которая выполнена (в отличие от оболочки или встроенной команды функции), то вы можете столкнуться с пределом
execve()
системного вызова на некоторых системах. В большинстве систем этот системный вызов имеет ограничение на совокупный размер аргументов и передаваемой ему среды, а в Linux также отдельное ограничение на размер одного аргумента.Для более подробной информации смотрите:
Чтобы обойти это ограничение, вы можете использовать (при условии, что GNU
xargs
или совместимый):Выше, поскольку
printf
он встроен (bash
и в большинство оболочек типа Борна), мы не достиглиexecve()
предела. Иxargs
разделит список аргументов на столькоrm
вызовов, сколько необходимо, чтобы избежатьexecve()
ограничения.С
zsh
:С
ksh93
:источник
Вы можете увидеть ограничение на общий размер аргументов с помощью:
Как правило, это определяется не оболочкой, а операционной системой в соответствии с этим ответом .
источник