2014-04-30 87 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將從結果壓縮包中過濾掉,是的。 –