2013-02-16 104 views
1

前一段时间,我使用Linux“tar -cf”命令压缩了一个应用程序。那时的一些文件名是用不同的语言编写的。Linux untar命令将文件名显示为问号

现在,当我使用“tar -xf”解压缩时,它将其他语言中的文件名显示为问号。

有没有办法,当我解压缩它保持原来的文件名称,因为它们是?

非常感谢您的帮助。

回答

1

好问题!预计像任何Unix命令一样,tar可以将其输出传送给另一个程序,如果可能的话包括文件名数据。一个快速的搜索结果表明,情况就是这样:如本博文所述,GNU tar支持--to-command参数将输出写入管道,而不是直接在目录上操作。

http://osmanov-dev-notes.blogspot.com.br/2010/07/how-to-handle-filename-encodings-in.html

所以这是写一个脚本文件名转换为UTF-8,像它在所引用文章的做的事情。另一种选择,也在文中描述,在阅读之后变得很明显,就是简单地提取一切,然后编写一个脚本来转换目录中的每个文件。这个链接中有一个简单的php脚本。

最后,您可以随脚本语言的帮助编写自己的自定义tar版本,这很容易。 Python的,例如有一个建于标准库的tar文件模块:

http://docs.python.org/2/library/tarfile.html#examples

你可以在一个循环中使用TarFile.extractfile(),shutils.copyfileobj()和str.decode()手动提取文件,同时更改文件名编码。

参考文献:

http://www.gnu.org/software/tar/manual/tar.html#SEC84

http://docs.python.org/2/library/tarfile.html

http://www.manpagez.com/man/1/iconv/

+0

谢谢hdante。这并没有帮助一个原因是我不是一个Python程序员。此外,应用程序本身非常大,文件分布在数百个目录中。 – amirak17 2013-02-18 01:59:31

+0

复制粘贴dispatch_arc_file.sh在Osmanov的页面中描述。这是一个shell脚本,不是Python代码。然后运行命令,他在描述中用旧编码作为参数写入。 – hdante 2013-02-24 23:12:57