Psy*_*aut 8 tar character-encoding filenames unicode
我偶尔会得到 tarball,其中文件名以 ISO-8859-1 或其他一些 pre-Unicode 方案编码。我的系统使用 UTF-8,所以当我使用常用选项 ( tar xvf foo.tar
)解压这些档案时,我最终会得到一个充满 mojibake 文件名的目录。
到目前为止,我一直在使用在提取convmv
文件名后将文件名转换为 UTF-8 。这有点不方便,因为我要么需要convmv
在每个受影响的文件上调用,要么将文件解压缩到一个新目录中,convmv
在整个目录上运行,然后将文件移动到我最初想要它们的位置。如果没有将此功能编码到 shell 脚本中,是否有某种方法可以将存档文件名即时转换为 UTF-8,因为它们正在解压缩?
Tho*_*ker 12
这是一个小tar
文件提取器,可以在提取之前修改内存中的名称:
#!/usr/bin/python27
import tarfile
def transform(data):
u = data.decode('latin1')
return u.encode('utf8')
tar = tarfile.open('archive.tar')
for m in tar.getmembers():
m.name = transform(m.name)
tar.extractall()
Run Code Online (Sandbox Code Playgroud)
警告:与 GNU 不同tar
,此提取器不会剥离前导/
. 向此提取器添加检查逻辑或tar
在使用tar -t
.