GNU/Linux >> Linux の 問題 >  >> Linux

Linuxコマンド:テキストファイルのみを「検索」する方法は?

これが古いスレッドであることは知っていますが、偶然見つけて、 find を使用する非常に高速な方法であることがわかったメソッドを共有すると思いました 非バイナリ ファイルのみを検索するには:

find . -type f -exec grep -Iq . {} \; -print

-I grep のオプションは、バイナリ ファイルと . をすぐに無視するように指示します。 -q とともにオプション テキストファイルとすぐに一致するようになるため、非常に高速になります。 -print を変更できます -print0xargs -0 へのパイプ用 または、スペースが気になる場合 (@lucas.werkmeister さん、ヒントをありがとう!)

また、最初のドットは find の特定の BSD バージョンでのみ必要です OS X のようなものですが、これをエイリアスなどに入れたい場合は、常にそこに置いておくだけで何も害はありません.

編集 :@ruslan が正しく指摘したように、-and 暗示されているため、省略できます。


この SO の質問に基づいて:

grep -rIl "needle text" my_folder


なぜ不便なのですか?頻繁に使用する必要があり、毎回入力したくない場合は、bash 関数を定義するだけです:

function findTextInAsciiFiles {
    # usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
    find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text
}

.bashrc に入れてください そして実行するだけです:

findTextInAsciiFiles your_folder "needle text"

編集 OPの編集を反映するには:

MIME 情報を除外したい場合は、MIME 情報を除外するステージをパイプラインに追加するだけです。 : の前に来るものだけを取得することで、これでうまくいくはずです。 :cut -d':' -f1 :

function findTextInAsciiFiles {
    # usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
    find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text | cut -d ':' -f1
}

Linux
  1. Linuxgrepコマンドの使用方法

  2. Linuxでファイルの名前を変更する方法

  3. Linux の find コマンドを使用してファイルを検索する方法

  1. Linuxでfdコマンドを使用してファイルを検索する方法

  2. Linux で GREP を使用して特定のテキストを検索する方法

  3. Linuxで2つの文字列を一緒に含むファイルを見つける方法は?

  1. Grepコマンドを使用してファイル内のテキストを検索する方法

  2. Linuxでテキストを含まないテキストファイルを見つける方法は?

  3. Linux で特定のテキストを含むすべてのファイルを見つけるにはどうすればよいですか?