web-dev-qa-db-ja.com

Mac OSXのfind / grepが「unknown--devicesoption」を生成します

Linux、Unixで頻繁に実行したコマンドを入力していますが、Apple Mac OS X 10.8(およびおそらくそれ以前)では、実行しようとするとgrep: unknown --devices optionが表示されます。次のコマンド:

find . -type f -name '*.sql' 2>/dev/null | xargs grep -i 'texttolookfor'

findコマンドの結果を確認したところ、すべて標準の.sqlファイルのようです。また、この問題は.sqlファイルだけでなく他のファイル検索でも発生することを付け加えておきます。 AppleサイトとGoogleを検索したところ、ここで何が起こっているのかを示すものが見つからないようです。

誰か提案がありますか?

5
sldahlin

面白い名前のファイルをヒットしたようですが、xargsはそれを2つのファイルとして扱っています。最善のアプローチは、すべての名前を安全に処理するために検索結果を作り直すことです。

find . -type f -name '*.sql' -exec grep -i 'texttolookfor' '{}' +

これは、xargsの代わりにfind--exec COMMAND +構文を使用します。 -print0/xargs -0を使用することもできますが(OS Xで機能するかどうかはわかりません)、他のxargs機能が必要でない限り、実際に使用する理由はありません。

最後に、OS X grepがそれをサポートしている場合は、--を使用して、オプションの終了を示すことができます。これは、上記の'{}'の前にありますが、find(見つかったファイルは常に./で始まるため)

4
derobert

これは、環境変数GREP_OPTIONSが設定されているようです。次のコマンドで確認できます。

$ env | grep GREP_OPTIONS

設定されている場合は、設定を解除するだけです。

$ unset GREP_OPTIONS

なぜこれがOSXで行われるのかわかりません。煩わしい場合は、永久に無効にするより良い方法があるかもしれませんが、$HOME/.bashrcファイルに行を追加するだけで、これが機能しないと仮定すると機能するはずです。このファイルの後に他の何かによって設定されていません。

unset GREP_OPTIONS
1
slm

MacはLinuxからではなくBSDから派生しているため、ターミナルにあるツールの多くはBSDであり、GNUではなくユーティリティのフレーバーであることに注意してください。 BSDとGNUのバージョンはほとんど互換性がありますが、微妙ですぐに怒る多くの違いがあります。これらの微妙な点の多くは、sedなどのテキスト処理ツールで発生します。 grep; tarでさえ、覚えておく必要のあるいくつかの問題があります。

MacPorts のインストールを検討し、それを使用してGNUバージョンのユーティリティを入手することをお勧めします。 Macと互換性のあるスクリプト。

0
DopeGhoti