你好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'对我的文件的权限
有什么线索如何解决这个问题?
此致
答案 0 :(得分:3)
如果您知道哪些文件应具有执行权限,则可以使用过滤功能手动设置权限:
def set_permissions(tarinfo):
tarinfo.mode = 0777 # for example
return tarinfo
tar.add('my_folder', filter=set_permissions)
答案 1 :(得分: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
。