バイナリを無視するようにこの検索コマンドを変更できますか?

バイナリを無視するようにこの検索コマンドを変更できますか?

テキストファイル(変数名など)で特定のコンテンツを見つけるために使用した「スキャン」という小さなスクリプトで生成されたコマンドがあります。

find "." \
  | awk '{print "\""$0"\""}' \
  | xargs grep -n --exclude-dir=.git "<iframe" \
  | awk 'length($0) < 1000'

たとえば、ここではiframeオープンタグを検索するために使用しています。

最後の行は、長さが1000文字未満の行のみを考慮するように指示します。なぜなら、行の長さを持つファイルは通常バイナリファイルであるか、リンクされたJavaScriptであるため、一般的に興味がありません。 (長い行を見たい場合)

バイナリを除外するようにこれを修正するより良い方法はありますか?それとも、.mp4、.mp3、.swf、.jpg、.pngなどのように無視したいファイル形式を明示的に一覧表示する方が良いでしょうか?

答え1

man grep教えてください:

--binary-files=TYPE

ファイルの最初の数バイトがファイルにバイナリデータが含まれていることを示す場合、そのファイルはタイプタイプ
と見なされます。デフォルトでは TYPE は でありbinary、 grep は通常バイナリが一致することを示す 1 行メッセージを出力するか、一致しないとメッセージを出力しません。 TYPEがある場合、grepは> binary filesがこのオプションwithout-matchと同じであると仮定します。-ITYPEがある場合、textgrepはバイナリファイルをテキストのように扱います。これはこの-aオプションと同じです。警告:grep --binary-files=textバイナリガベージが出力される可能性があり、出力が端末用であり、端末ドライバがその一部をコマンドとして解釈する場合、重大な副作用が発生する可能性があります。

それでは、それは-Iあなたに効果があると思いますか? (grepファイルの前半にASCII以外の文字があると混乱を招く可能性があります。)

ああ、そもそもこの機能は必ずしも必要ではないようで、gawk見つかったファイル名をヌルバイトで終了するオプションfind … -execと一緒に使う必要があるようです。-0

関連情報