タスクは、ディレクトリ内のすべてのファイルに文字「a」が表示される回数を(再帰的に)見つけることです。
私のスクリプトは次のとおりです
find . -type f -exec grep -o 'a' {} \; 2>/dev/null | wc -l
しかし、失敗します。私のローカルコンピュータでも動作し、結果は0です。
このスクリプトにはどのような問題がありますか?防弾やそんなことではないようです。どのように防弾するか、正しく作成できますか?
ベストアンサー1
私の考えでは、問題のコンピュータがgrep
-oをサポートしていないようです。
この場合、コマンドラインはfind
実行するたびにエラーメッセージを生成しますgrep
。しかし、標準エラーが/dev/nullにリダイレクトされ、人々の悲鳴は耳に聞こえなくなりました。
wc
grep
シングルバイトが受信されずすぐに終了したため、行数は0になります。
stderrリダイレクトやログファイルにリダイレクトせずにパイプラインを実行してみてください。私が正しい場合は、見つかったファイルごとに1つのエラーメッセージが表示されますfind
。
役に立つと思われるとうまくいかない選択肢は次のとおりですgrep
。
find . -type f -exec cat {} \; | tr -cd a | wc -m
find
より効率的な+
実行代替をサポートする場合:
find . -type f -exec cat {} + | tr -cd a | wc -m