哪个命令可用于确定文件是否为二进制文件

art*_*rtm 5 linux bash ubuntu

我在文件夹中抓取某个文本时遇到了一些问题.

grep "Notifying status" -R
Binary file fix2.log matches
Run Code Online (Sandbox Code Playgroud)

事实证明,包含文本的文件是二进制文件.实际上它是一个日志文件(由PAC管理器创建),可以使用notepad ++(或任何其他文本文件)正确读取.我不确定为什么操作系统会确定它

当我这样做时ls,所有文件都列出相同的-rwxr--r--

当我这样做file fix2.log时显示为data

是否有任何命令可以显示文件是否为二进制文件,例如来自ls视图?

Dus*_*rea 8

在Linux/Unix下,查找不是"text/plain"的任何内容:

$ file -I -b /tmp/local-access.log
text/plain; charset=us-ascii
Run Code Online (Sandbox Code Playgroud)

编辑:

实际上,因为file 没有不同类型的文本文件之间进行分类,编码可能是更好的路要走:

$ echo "Testing" | file -I -b -
text/plain; charset=us-ascii

$ echo "<html></html>" | file -I -b -
text/html; charset=us-ascii

$ echo "<?xml version="1.0"?><catalog></catalog>" | file -I -b -
application/xml; charset=us-ascii

$ echo "<?xml version="1.0"?><catalog></catalog>" | file --mime-encoding -b -
us-ascii
Run Code Online (Sandbox Code Playgroud)

注意@ CharlesDuffy的评论如下.这只会检查一些头/尾信息,但是,1)这对于所有非异国情况都是足够的(大多数二进制文件不会在文件的正面和背面有纯文本),2)你不要如果输入具有任意长度(例如2G),则必须检查每个字节

  • **注意**Dustin在这里使用的命令.这里使用的`file`命令**专门用于标识文件的内容...不仅仅是"它是二进制",而是"它是什么*.""man file"页面关于命令如何工作,非常非常详细. (2认同)

Cha*_*ffy 5

grep只是为其"二进制"测定寻找非ASCII内容.您可以使用-a标志轻轻覆盖它,以假设所有内容都是文本:

grep -a "Notifying status" -R
Run Code Online (Sandbox Code Playgroud)

  • @viraptor,它解决了OP的意图,而不是他们的问题.这就是说我在争论OP提出了错误的问题. (2认同)