Bashファイル名拡張子(ワイルドカード)に最大制限はありますか?それでは何ですか?バラよりワイルドカードtldp.orgから
ファイルのサブセットに対してコマンドを実行したいとしましょう。
grep -e bar foo*
rm -f bar*
Bashが拡張できるファイル数に制限はありますか?限界があればどのくらいですか?
私はこれらのタスクを実行する他の方法(使用など)を探していませんfind
。
答え1
globが拡張できるファイル数(利用可能なメモリを除く)に制限はありませんbash
。
しかし、これらのファイルがコマンドに引数として渡された場合処刑された(シェル組み込み機能や関数とは対照的に)execve()
一部のシステムでは、システムコールの制限が発生する可能性があります。ほとんどのシステムでは、このシステムコールには渡された引数と環境の累積サイズに制限があり、Linuxでは個々の引数のサイズに別々の制限があります。
詳細については、次を参照してください。
これらの制限を解決するには、次のものを使用できます(GNUxargs
または互換性があると仮定)。
printf '%s\0' foo* | xargs -r0 rm -f
上記ではprintf
(Bourneに似たほとんどのシェルに)組み込まれているので、bash
限界に達していませんexecve()
。制限を避けるために、xargs
引数リストを必要なだけの呼び出しに分割します。rm
execve()
そしてzsh
:
autoload zargs
zargs foo* -- rm -f
そしてksh93
:
command -x rm -f foo*