我可以修改此搜索命令以忽略二进制文件吗?

我可以修改此搜索命令以忽略二进制文件吗?

我有一个由我编写的名为“scan”的小脚本生成的命令,我一直使用它来查找文本文件中的特定内容(变量名称等):

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。默认情况下,TYPE 为binary,并且 grep 通常会输出一行消息,表示二进制文件匹配,如果不匹配,则不输出任何消息。如果 TYPE 为without-match,grep 假定 >binary 文件不匹配;这相当于该 -I 选项。如果 TYPE 为text,grep 会像处理文本一样处理二进制文件;这相当于该-a选项。警告:grep --binary-files=text可能会输出二进制垃圾,如果输出是终端并且终端驱动程序将其中一些解释为命令,则可能会产生严重的副作用。

所以它看起来-I可能适合你? (请注意,grep文件早期的任何非 ASCII 字符完全有可能造成混淆。)

哦,我认为你真的不需要首先gawkfind … -exec应该使用它,可能可以选择-0用空字节终止找到的文件名。

相关内容