如何检查文件是否为二进制文件并读取所有非二进制文件?

66

如何判断一个文件是二进制文件?

例如,编译后的 C 文件。

我想从某个目录读取所有文件,但我想忽略二进制文件。


10
最终,所有文件都是二进制的。文本文件只是包含人类可读字符数据的二进制表示方式而已。没有一种可以百分之百可靠地区分文本和非文本文件的方法。 - Keith Thompson
13个回答

0

0

grep

假设二进制意味着文件包含非可打印字符(不包括空白字符,如空格、制表符或换行符),这可能有效(适用于BSD和GNU):

$ grep '[^[:print:][:blank:]]' file && echo Binary || echo Text

注意:GNU grep 会将只包含 NULL 字符的文件报告为文本,但在 BSD 版本 上可以正常工作。

更多示例,请参见:如何 grep 所有非 ASCII 字符


0
也许这就足够了...
if ! file /path/to/file | grep -iq ASCII ; then
    echo "Binary"
fi

if file /path/to/file | grep -iq ASCII ; then
    echo "Text file"
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接