これが古いスレッドであることは知っていますが、偶然見つけて、 find
を使用する非常に高速な方法であることがわかったメソッドを共有すると思いました 非バイナリ ファイルのみを検索するには:
find . -type f -exec grep -Iq . {} \; -print
-I
grep のオプションは、バイナリ ファイルと .
をすぐに無視するように指示します。 -q
とともにオプション テキストファイルとすぐに一致するようになるため、非常に高速になります。 -print
を変更できます -print0
に xargs -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
}