转储文本文件

时间:2010-10-13 01:14:05

标签: linux bash shell character-encoding detection

我正在编写一个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 repoPyPI找到。当前版本实际上没有做我在这个问题中提到的东西:最终过于耗费时间并且没有足够的实施能力。

但它可能会进入后期修订版;如果是这样,我可能最终会使用快速扫描进行二进制检测(如其中一个注释线程中所述)和使用chardet模块,如Zack所述。另一种选择可能是使用file C实用程序的Python包装器,但我不确定它是多么可移植。

2 个答案:

答案 0 :(得分:2)

您是否尝试过提供更一致输出的mime选项?

file --mime-encoding --mime-type -b somefile

答案 1 :(得分:1)

Universal Encoding Detector对此非常了解 - 唉,完全不可能做到这一点。它需要Python。