Macでfind -type f | xargs grepと同じことができないか検証してみた

2020/01/19

author

masyus

Mac内でターミナル等を用いてカレントディレクトリ配下を文字列検索しようとした時のことです。Linuxでカレントディレクトリから特定のディレクトリ内を文字列検索する時に使っていました

find -type f | xargs grep XXXX

のコマンドがそのまま使えなかったため、「Macのfindでも同じことができないか?」と思い検証してみました。

Linuxのfind -type f | xargs grepの意味

Linuxにおけるfind -type f | xargs grep {文字列}のコマンド詳解 に書き起こしましたので、こちらを参照ください。

MacのfindコマンドとLinuxのfindコマンドの違い

Macに標準でインストールされているfindコマンドとLinuxで使えるfindコマンドの違いは、検索対象のパス指定が必須か否かです。Macのfindコマンドは検索対象のパス指定が必須となります。試しにMacで

find -type f | xargs grep XXXXX

を実行してみましょう。実行結果は下記です。

find: illegal option -- t
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

このように、実行することができません。正しくは下記のようにします。

find . -type f | xargs grep XXXXX

実行結果は下記です。

./hoge.txt:<a href="/">XXXXX</a>

カレントディレクトリを意味する../をつけることでLinuxのfindと同様の挙動になります。Linuxのfindでも、パスを../で指定すると同じ挙動になります。