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

时间:2016-08-02 01:30:43

标签: linux bash ubuntu

我在文件夹中点击某个文字时遇到了一些问题。

grep "Notifying status" -R
Binary file fix2.log matches

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

当我执行ls时,所有文件都会列出相同的-rwxr--r--

当我file fix2.log时,它显示为data

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

2 个答案:

答案 0 :(得分:8)

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

$ file -I -b /tmp/local-access.log
text/plain; charset=us-ascii

编辑:

实际上,由于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

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

,则必须检查每个字节

答案 1 :(得分:5)

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

grep -a "Notifying status" -R