5

你好stackoverflowers,

我想在使用 Python 的 tarfile 模块时保留原始文件权限。解压缩 tarball 后,我有很多可执行文件会失去权限。

我正在做这样的事情:

import tarfile
tar = tarfile.open("mytarball.tar.gz", 'w:gz')
tar.add('my_folder') #tar the entire folder 
tar.close()

然后我使用shutil将它从windows复制到linux机器(用samba映射):

shutil.copy("mytarball.tar.gz",unix_dir)

然后,要在 linux 中提取 tarball,我会这样做

unix>tar -xvf mytarball.tar.gz  

解压缩 tarball 后,我失去了对文件的所有“x”权限

任何线索如何解决这个问题?

问候

4

2 回答 2

5

如果您知道哪些文件应该具有执行权限,您可以使用过滤功能手动设置权限:

def set_permissions(tarinfo):
    tarinfo.mode = 0777 # for example
    return tarinfo

tar.add('my_folder', filter=set_permissions)
于 2014-04-30T20:58:07.180 回答
0

基于@DanGetz 解决方案,我为python3.8 完成了这项工作:

我正在使用流响应来创建我的 tar 文件,但这里有完整的代码。

tar_stream = io.BytesIO()
tar = tarfile.TarFile(fileobj=tar_stream, mode='w')
file_data = content.encode('utf8')
tarinfo = tarfile.TarInfo(name=file_name)
tarinfo.size = len(file_data)
tarinfo.mtime = time.time()
tarinfo.mode = 0o740 # <--------
tar.addfile(tarinfo, io.BytesIO(file_data))
tar.close()

在 python 2.6 和 3+ 中,您必须使用这种格式来获取权限: 0o777而不是0777.

来自:https ://stackoverflow.com/a/1627222/6809926

于 2021-05-04T12:40:29.620 回答