我正在编写一个shell脚本,它将创建一个存档的文本(即可扩展)转储。
我想检测每个文件是否可以在某个给定的字符集中打印,如果它是可打印的,我想从其中的任何一个转换为该字符集,如果可能的话,使其内容成为转储的一部分。
我考虑使用file
实用程序,但似乎没有办法告诉它只打印字符编码或data
。例如:
$ file -e soft -e tokens -e tar -e apptype -e cdf -e compress -e elf -e tar config.sub
config.sub: Lisp/Scheme program text
config.sub
是使用file
源代码分发的文件之一。
我也有点担心解析其相当不可预测的输出。
我希望将此脚本的依赖关系降至最低。我已经在使用perl了,但是我不想依赖任何perl包。大概iconv
将是进行转换的最佳方式,我不介意将其作为依赖。
另一方面,也许我的新生脚本这样的实用工具已经可以随时使用了吗?
更新:我最终用Python编写了这个。它可以在github repo或PyPI找到。当前版本实际上没有做我在这个问题中提到的东西:最终过于耗费时间并且没有足够的实施能力。
但它可能会进入后期修订版;如果是这样,我可能最终会使用快速扫描进行二进制检测(如其中一个注释线程中所述)和使用chardet
模块,如Zack所述。另一种选择可能是使用file
C实用程序的Python包装器,但我不确定它是多么可移植。
答案 0 :(得分:2)
您是否尝试过提供更一致输出的mime选项?
file --mime-encoding --mime-type -b somefile
答案 1 :(得分:1)
Universal Encoding Detector对此非常了解 - 唉,完全不可能做到这一点。它需要Python。