我有一个由我编写的名为“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 字符完全有可能造成混淆。)
哦,我认为你真的不需要首先gawk
,find … -exec
应该使用它,可能可以选择-0
用空字节终止找到的文件名。