このようなコマンドを実行するとls */*/*/*/*.jpg
エラーが発生します。
-bash: /bin/ls: Argument list too long
私はなぜこれが起こるのか知っています。コマンド引数のスペースサイズにカーネル制限があるためです。標準的なアドバイスは、あまりにも多くの引数スペースを必要としないように使用するコマンドを変更することです(たとえば、usefind
やxargs
)。
コマンドを変更したくない場合はどうすればよいですか?同じコマンドを引き続き使用するにはどうすればよいですか?このエラーが発生せずに「正しく動作する」ようにするにはどうすればよいですか?どのソリューションを使用できますか?
ベストアンサー1
Linuxでは、コマンドパラメータの最大スペースは利用可能なスタックスペースの1/4です。したがって、解決策はスタックの空き容量を増やすことです。
ショートバージョン:次のことを実行します。
ulimit -s 65536
より長いバージョン:スタックのデフォルトの空き容量は約8192KBです。次のように空き容量を確認できます。
$ ulimit -s
8192
より大きな数字を選択し、スタックの空き容量を設定します。たとえば、スタックを最大65536KBまで許可するには、次のコマンドを実行します。
$ ulimit -s 65536
必要なサイズを決定するには、試行錯誤を受ける必要があります。ほとんどの場合、これはコマンドや計算構文などを変更する必要がない迅速で汚い解決策です。find
(xargs
これは他の利点があることを知っていますが)
私はこれがLinuxに限定されていると思います。他のUnixオペレーティングシステム(テストされていない)では役に立ちません。