0

find . -type f |xargs grep string |awk -F":" '{print $1}' |uniq

上記のコマンドは、文字列「test」を含むすべてのファイルの名前を取得します。ただし、結果にはバイナリ ファイルが含まれます。

問題は、バイナリ ファイルを除外する方法です。

ありがとうございます。

4

2 に答える 2

3

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ます。
  • William Pursell が正しくコメントしているように、-Rおよび-Iスイッチは のすべての実装で使用できるわけではありませんgrepgrepオプションを所有している場合は、 andスイッチmake me a sandwichをサポートする可能性が非常に高くなります。YMMV。-R-I
于 2013-10-31T06:54:31.197 に答える
0

私が使用している Unix のバージョンは、コマンド「grep -I/R」をサポートしていません。

コマンドを試しました:

file `find ./` | grep text | cut -d: -f1 | xargs grep "test"
于 2014-07-13T07:12:31.550 に答える