sh コマンドで find を使用することができません - 追加のクエリ

sh コマンドで find を使用することができません - 追加のクエリ

以前投稿された質問に加えて sh で find を使用する - コマンドが機能しない

find . -type f -name '*FW*' -exec grep -iEq 'chmod.*archive|archive.*chmod' {} \; -ls

このコマンドは、「archive」または「chmod」テキストが複数行に見つかった場合、ファイルを見つけることができませんでした。ただし、「chmod」と「archive」テキストが同じ行に見つかった場合は、ファイルをスキャンできます。

このコマンドを試してみましたが、目的のo/pが得られませんでした

1> find . -type f -name '*FW*' -exec grep -iEq 'chmod.*' {} \; -ls -exec grep -iEq '.*archive.*' {} +

このコマンドではなぜ目的の o/p が得られないのでしょうか?

このコマンドを試したところ、期待通りの結果が出ましたが、「find: 'pcregrep' はシグナル 11 によって終了しました」というエラーで断続的に失敗しました。

2> find . -type f -name '*FW*' -exec pcregrep -qM 'chmod.*(\n|.)*archive.*' {} \; -ls

なぜエラーで失敗するのでしょうか?

答え1

質問の2番目のコマンドは、使用するテストの順序が重要であるため、正しい出力を出力しません。他のコマンドが実行されるためfind、コマンドは文字列を含むファイルの結果のみを出力します。chmodgrep -ls(出力は生成されません)。

chmod文字列との両方を含むファイルを検索しますarchive

find . -type f -name '*FW*' \
    -exec grep -Fiq chmod {} \; \
    -exec grep -Fiq archive {} \; -ls

これは、名前にgrep -Fiq chmodが含まれるすべてのファイルを呼び出しFW、次にgrep -Fiq archive最初にgrep一致が見つかったファイルを呼び出します。2 番目grepでも何かが見つかった場合は、 が-ls有効になります。

関連情報