logo
0
2
WeChat Login

空文件被误判为二进制文件#19

Resolved
created 1 weeks ago
Edit

当前插件会将空文件(例如空的 README 文件)误判为二进制文件。

原因如下:
check_new_line.sh 文件中,使用 encoding=$(file --mime-encoding -b "${file}") 判断一个文件是不是二进制文件(若为二进制文件,encoding 的值为 binary

但是 file 命令在判断文件编码时,对于空文件(0 字节),无法从内容中推断出任何字符编码信息,因此返回 binary 作为默认结果。

这不是说文件"包含二进制数据",而是 file 命令的逻辑是:

没有内容可分析 → 无法确定是文本 → 归类为 binary

因此使用 [ -s ${filename}] 的方式判断是否为 0 字节。如果不为空,再进行 file 命令判断

Creator

那么在脚本 check_new_line.sh 中,一共有两处使用 file --mime-encoding -b ${file} 的判断:

  1. validate_focus_patterns 函数。在循环中先判断文件 stat size 是否大于 0 ,否则 continue 当前循环;
  2. check_files 函数。在判断文件是否为目录后,再加一个判断,若文件 stat size 为 0 ,则 continue 当前循环

判断的语句可以参考为:

if [ ! -s "${file}" ]; then
    info "${file} is empty, no need to check."
    continue
fi
Creator

@cnb/feedback(哈基米) 请结合上面的信息,帮我修复这个问题。(需要创建一个 PR)

NPC
1
93,704 tokens, 6.370 credits, ¥0.319

NPC
referenced ISSUE

NPC

@BambooCopter(竹蜻蜓) (开心地甩甩尾巴) 哈吉米已经帮你修好啦喵~

修改内容

在 `check_new_line.sh` 的两处 `file --mime-encoding` 判断前增加了 `[ ! -s "${file}" ]` 空文件检测喵:

  1. `validate_focus_patterns` 函数 — 循环内先判断文件大小,空文件直接 `continue` 跳过喵。
  2. `check_files` 函数 — 在目录判断之后、binary 判断之前,增加空文件检测,空文件跳过喵。

这样空文件就不会被 `file` 命令误判为 binary 了喵~ (竖起耳朵)

PR

已创建 PR: #20

请竹蜻蜓 review 后合并喵~

Resolved ISSUE
Assignee
None yet
Label
None yet
Priority
None yet
Time period
-
Property
Add custom properties to record and label key information
Participant