find . -type f |xargs grep string |awk -F":" '{print $1}' |uniq
上記のコマンドは、文字列「test」を含むすべてのファイルの名前を取得します。ただし、結果にはバイナリ ファイルが含まれます。
問題は、バイナリ ファイルを除外する方法です。
ありがとうございます。
string
私の理解が正しければ、バイナリ ファイルを除く、文字列 を含むディレクトリとそのサブディレクトリ内のすべてのファイルの名前を取得する必要があります。
のフレンドリーなマニュアルを読んgrep
で、これをキャッチできました:
-I Process a binary file as if it did not contain matching data;
this is equivalent to the --binary-files=without-match option.
すばらしい!
さて、私はどうやって取り除くのfind
ですか?これはただで可能grep
ですか?ああ、下の 2 行、ファンキーなマニュアルにまだありますが、これを読みました。
-R, -r, --recursive
Read all files under each directory, recursively; this is
equivalent to the -d recurse option.
それは素晴らしいですね。
ファイル名だけを取得するのはどうですか?まだgrep
の面白いマニュアルで、私は読んだ:
-l, --files-with-matches
Suppress normal output; instead print the name of each input
file from which output would normally have been printed. The
scanning will stop on the first match. (-l is specified by
POSIX.)
わーい!私たちは終わったと思います:
grep -IlR 'string' .
備考。
make me a sandwich
マニュアルでも検索しようとしましたが、私のバージョンのgrep
はサポートしていないようです。YMMV。man grep
ます。-R
および-I
スイッチは のすべての実装で使用できるわけではありませんgrep
。grep
オプションを所有している場合は、 andスイッチmake me a sandwich
をサポートする可能性が非常に高くなります。YMMV。-R
-I
私が使用している Unix のバージョンは、コマンド「grep -I/R」をサポートしていません。
コマンドを試しました:
file `find ./` | grep text | cut -d: -f1 | xargs grep "test"