Bashファイル名の拡張(グロビング)の最大数はありますか?ある場合、それは何ですか? tldp.orgの globbing を参照してください。
ファイルのサブセットに対してコマンドを実行したいとしましょう:
grep -e bar foo*
rm -f bar*
Bashが展開するファイルの数に制限はありますか?ある場合、それは何ですか?
これらの操作を実行する別の方法を探していません(たとえば、find
を使用して)。
bash
グロブによって拡張できるファイルの数に(使用可能なメモリ以外に)制限はありません。
ただし、これらのファイルが実行されるコマンドに引数として渡される場合(Shellビルトインまたは関数ではなく)、制限に達する可能性があります一部のシステムでは、execve()
システムコールの一部です。ほとんどのシステムでは、そのシステムコールは、渡される引数と環境の累積サイズに制限があり、Linuxでは、単一の引数のサイズにも個別の制限があります。
詳細については、以下を参照してください。
この制限を回避するには、次を使用できます(GNU xargs
または互換性があると仮定):
_printf '%s\0' foo* | xargs -r0 rm -f
_
上記では、printf
が(bash
およびほとんどのBourneのようなシェルに)組み込まれているため、execve()
の制限に達しません。また、xargs
は、execve()
の制限を回避するために、引数のリストを必要な数のrm
呼び出しに分割します。
zsh
の場合:
_autoload zargs
zargs foo* -- rm -f
_
_ksh93
_の場合:
_command -x rm -f foo*
_