"find -print0"出力をgrepする方法は?

私はこれを試しました:

find /usr/lib -print0 | grep zip | xargs -0 -I{} echo "found file: {}"
find /usr/lib -print0 | grep --null zip | xargs -0 -I{} echo "found file: {}"

しかし、grepは、一致するバイナリファイルが1つしかないと言うので動作しません。 null文字で終わる行を出力するためにgrepが必要です。

コマンド全体を変更せずにこの問題を解決できますか?私はそれが動作することを知っていますfind -name ... -exec ...。しかし、既存のコマンドを修正できれば良いでしょう。

ベストアンサー1

使い方を見ると、--nullGNUを使っているとしますgrep。考慮してください。データnull 値で区切られた-z( --null-data) オプションを含む、次のオプションを使用してすべてをテキストとして処理します-a

find /usr/lib -print0 |
  grep -a -z zip |
  xargs -r0 printf 'found file: %s\n'

(これを使用してecho任意のデータを出力できないことを忘れないでください。)

--nullgrepファイル名の出力にのみ影響します。、ここには何の影響もありません。

前述のように、GNUを使用しfindたり、GNUを使用しなくても、これを完全に実行できます。しかし、パスの両側にテキスト以外のファイルを見つけることができるはずです-execが(そうではありませんが):LC_ALL=Czip/usr/lib

LC_ALL=C find /usr/lib -path '*zip*' -printf 'found file: %p\n'

おすすめ記事