私はこれを試しました:
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
使い方を見ると、--null
GNUを使っているとしますgrep
。考慮してください。データnull 値で区切られた-z
( --null-data
) オプションを含む、次のオプションを使用してすべてをテキストとして処理します-a
。
find /usr/lib -print0 |
grep -a -z zip |
xargs -r0 printf 'found file: %s\n'
(これを使用してecho
任意のデータを出力できないことを忘れないでください。)
--null
grep
ファイル名の出力にのみ影響します。、ここには何の影響もありません。
前述のように、GNUを使用しfind
たり、GNUを使用しなくても、これを完全に実行できます。しかし、パスの両側にテキスト以外のファイルを見つけることができるはずです-exec
が(そうではありませんが):LC_ALL=C
zip
/usr/lib
LC_ALL=C find /usr/lib -path '*zip*' -printf 'found file: %p\n'