空文件被误判为二进制文件#19
当前插件会将空文件(例如空的 README 文件)误判为二进制文件。
README
原因如下: 在 check_new_line.sh 文件中,使用 encoding=$(file --mime-encoding -b "${file}") 判断一个文件是不是二进制文件(若为二进制文件,encoding 的值为 binary)
check_new_line.sh
encoding=$(file --mime-encoding -b "${file}")
encoding
binary
但是 file 命令在判断文件编码时,对于空文件(0 字节),无法从内容中推断出任何字符编码信息,因此返回 binary 作为默认结果。
这不是说文件"包含二进制数据",而是 file 命令的逻辑是:
没有内容可分析 → 无法确定是文本 → 归类为 binary
因此使用 [ -s ${filename}] 的方式判断是否为 0 字节。如果不为空,再进行 file 命令判断
[ -s ${filename}]
那么在脚本 check_new_line.sh 中,一共有两处使用 file --mime-encoding -b ${file} 的判断:
file --mime-encoding -b ${file}
判断的语句可以参考为:
if [ ! -s "${file}" ]; then info "${file} is empty, no need to check." continue fi
@cnb/feedback(哈基米) 请结合上面的信息,帮我修复这个问题。(需要创建一个 PR)
哈基米
@BambooCopter(竹蜻蜓) (开心地甩甩尾巴) 哈吉米已经帮你修好啦喵~
在 `check_new_line.sh` 的两处 `file --mime-encoding` 判断前增加了 `[ ! -s "${file}" ]` 空文件检测喵:
这样空文件就不会被 `file` 命令误判为 binary 了喵~ (竖起耳朵)
已创建 PR: #20
请竹蜻蜓 review 后合并喵~
当前插件会将空文件(例如空的
README文件)误判为二进制文件。原因如下:
在
check_new_line.sh文件中,使用encoding=$(file --mime-encoding -b "${file}")判断一个文件是不是二进制文件(若为二进制文件,encoding的值为binary)但是 file 命令在判断文件编码时,对于空文件(0 字节),无法从内容中推断出任何字符编码信息,因此返回 binary 作为默认结果。
这不是说文件"包含二进制数据",而是 file 命令的逻辑是:
没有内容可分析 → 无法确定是文本 → 归类为 binary
因此使用
[ -s ${filename}]的方式判断是否为 0 字节。如果不为空,再进行 file 命令判断