这是后续外观正常的文本文件,由文件检测为 ASCII Pascal 程序文本
看来file
始终不能相信。
似乎某个特定文件可能被检测为同时具有encoding/format1
和encoding/format2
。file
告诉我它是encoding/format1
,但我需要检查它是否也满足 的约束encoding/format2
。
- 有没有办法做到这一点?
- 有没有办法我可以问“检查这个文件是否遵循 ASCII 英文文本的规则(或其他一些编码)”,答案是“是”还是“否”?
答案1
也许您可以使用的--keep-going
( -k
) 选项file
。它写出更多匹配的格式。
有关的手册页该选项的说明:
不要在第一场比赛就停下来,继续前进。后续匹配将在前面添加字符串“\012-”。 (如果您想要换行符,请参阅 -r 选项。)强度最高的魔术模式(请参阅 -l 选项)排在第一位。
答案2
只回答你的第二个问题,如jofel已经回答了第一个。
- 有没有办法让我问“检查这个文件是否遵循 ASCII 英文文本(或其他编码)的规则”,答案是“是”或“否”?
请参阅-e
/--exclude
选项。从file(1)
:
-e, --排除 测试名称
排除指定的测试测试名称从为确定文件类型而进行的测试列表中。
[...]
soft Consults magic files
这些魔法文件负责 Pascal 报告,所以-e soft
应该足够了。您也可以尝试从该列表中排除其他测试,只要您保持ascii
启用状态即可。
对于“是/否”测试,请与-b
(“简短”,即不带文件名)和结合使用--mime-encoding
,以仅输出编码。然后是简单的字符串比较:
if [ "$(file -b --mime-encoding -e soft $file)" == "us-ascii" ] ; then
echo yes
else
echo no
fi