都内SEのプログラミング勉強と雑記

2008年より都内でSEをしてます。業務システムをリプレイスし続けてきました。ここでは主にjavaやその周辺技術関連を紹介予定。学ぶことリスト:https://docs.google.com/spreadsheets/d/1G4lUqbHxsMf4PGgeRVe1ZL3JTOjlSTrqsJYe1CKz9UY/edit?usp=sharing

find xargs grepの結果がヒットしない。ファイル名に半角スペースまじってない?

f:id:object1985:20170925211710p:plain
よく使う構文ですが

find . -type f | xargs grep 検索したい文字

とすると対象のファイル名に半角スペースがまじっていると xargsの引数に渡した際に別のファイルと認識されてしまいます。

例) [AAA BBB.txt]という1ファイルがあった場合、[AAA][BBB.txt]という2ファイル扱いになってHitしなくなる。

そこでxargsの 区切り文字(未指定時のデフォルトは空白(半角スペース,改行,タブ))を -0でヌル文字に指定してfindの出力結果を-print0で合わせることで正しく検索できます。

find . -type f -print0 | xargs -0 grep 検索したい文字

引用
findとxargsコマンドで-print0オプションを使う理由(改) - Qiita

follow us in feedly