2014-04-30 56 views
1

hello stackoverflowers,使用Python的tarfile创建tarball时保留文件权限

我想在使用Python的tarfile模块时保留原始文件权限。 我有很多可执行文件在提取tarball后会失去它们的权限。

我在做这样的事情:

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

然后,我从窗户使用复制到一台Linux机器(与桑巴映射)shutil:

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

然后,提取压缩包在Linux中,我做

unix>tar -xvf mytarball.tar.gz 

tarball被提取后,我失去了我的文件的所有'x'权限

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

问候

+0

我用你的代码,并做了一个小测试保留'x'权限。有更复杂的事情发生吗?在将它们添加到tarball之前,您确定权限是否正确? –

+0

我正在将windows的tarbal复制到samba的unix上。我正在使用shutil:shutil.copy(“mytarball.tar.gz”,unix_dir)它可能会在那里发生。我必须仔细检查。但复制单个文件似乎工作。权限被保留。 – user3352256

+0

啊,好吧,我的测试只在Linux上,我知道如何执行文件权限的工作。不确定Python如何在Windows上处理执行文件权限。 –

回答

2

如果你知道,你的文件应该有执行权限或没有,你可以用过滤功能手动设置权限:

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

tar.add('my_folder', filter=set_permissions) 
+0

无法为我的Windows文件找到合适的过滤器。 tarball总是空的。 :( – user3352256

+0

我的错,我想!忘了从示例过滤器中返回tarinfo对象。返回None将从结果压缩包中过滤掉,是的。 –