以前に公開されたクエリに続いて shでfindを使用する - コマンドは機能しません。
find . -type f -name '*FW*' -exec grep -iEq 'chmod.*archive|archive.*chmod' {} \; -ls
"archive"または"chmod"テキストが複数行にある場合、このcmdはファイルを見つけることができません。ただし、「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
重要であるため、正しい出力を提供しません。このコマンドは、他のコマンドが実行されたchmod
ため、その文字列を含むファイルの結果のみを出力します。grep
後ろに -ls
(そして出力を生成しません)。
chmod
文字列とarchive
。
find . -type f -name '*FW*' \
-exec grep -Fiq chmod {} \; \
-exec grep -Fiq archive {} \; -ls
grep -Fiq chmod
名前にその内容を含むすべてのファイルを呼び出し、次に一致するものが見つかった最初のファイルを呼び出します。 2番目のファイルでも何かが見つかると、そのファイルが適用されます。FW
grep -Fiq archive
grep
grep
-ls