Macでvim等を使ってcliベースの開発をしていると、Linuxでカレントディレクトリから特定のディレクトリ内を文字列検索する時によく使っていた
1 |
$ find -type f | xargs grep XXXX |
がそのまま使えずモヤっとしたことがあった。そのため、Macのfindでも同じことができないかと思い、検証してみた。
Linuxのfind -type f | xargs grepの意味おさらい
別記事にまとめたので、そちらを参照されたし。
MacのfindコマンドとLinuxのfindコマンドの違い
Macに標準でインストールされているfindコマンドとLinuxで使えるfindコマンドの違いは何か?答えは検索対象のパス指定が必須か否かだった。Macのfindコマンドは検索対象のパス指定が必須で、そのためMacでfind -type f | xargs grepを実行すると
1 2 3 4 5 |
$ 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] $ |
こんな感じで怒られてしまう。正しくは
1 2 3 |
$ find . -type f | xargs grep XXXXX ./hoge.txt:<a href="/">XXXXX</a> $ |
のように、カレントディレクトリを意味する.か./をつけてあげるとLinuxのfindと同様の挙動をするようになる。また、Linuxのfindもパスを.か./で指定した場合、findだけのコマンドと同じ挙動をする。
というより、本来ならfindコマンドを使う時はMacだろうがLinuxだろうが、パスを指定して使うほうがデフォルトなのではないかと思った。