私は特定の文字列ではなく、他の文字列ではなく多くのXMLファイルを検索しようとしていますが、それを行うためのコマンドをまとめるのに問題があります。包含/除外基準に一致するファイル名のみをリストするようにします。私が試してきました:
find . -name *.xml -exec grep -li "string1\|string2" {} \; | xargs grep -Li "string3\|string4"
しかし、findから返されるファイル名には名前にスペースが含まれており、2番目のgrepがそれらをすべて小さなチャンクに分割し、もちろんそのようなファイルを見つけられないため、問題があります。xargsに追加しようとし-0
ましたが、エラーは削除されましたが、「ファイル名が長すぎます」と表示され、最初のgrepのみが実行されます。
名前にスペースが含まれるファイルで適切に動作するようにこのコマンドを調整するにはどうすればよいですか?
find . -name "*.xml" -exec grep -liZ "string1\|string2" {} \; | xargs -0 grep -Li "string3\|string4"
(Z
このフラグへgrep
と互換性があり、その結果リスト上のゼロターミネータを、出力xargs -0
)