2013-07-26 136 views
4

我想在壓縮後保持某些文件權限,但是我注意到文件權限並未保留。不管我做什麼,解壓縮文件的文件權限總是rw-r-r--。文件權限沒有被保留,而在zip之後

我曾嘗試以下的事情:

  • 在我的.bash_profile的umask設置爲0027不過,我在默認情況下看到新創建的壓縮文件創建的「0022」又名RW-R的文件的權限--r--。

  • 我曾嘗試與模式777設置AsiExtraField和附加,要ZipArchiveEntry,但是,它似乎並沒有影響燙髮。

ZipArchiveEntry條目=新ZipArchieveEntry(文件名); AsiExtrafield temp = new AsiExtraField(); temp.setMode(777); entry.addAsFirstExtraField(temp); zipoutputstream.putNextEntry(條目);

  • 對於ZipEntries我試圖setUnixMode()777,但是,仍然解壓文件有RW-R的許可 - R--。
ZipEntry entry = new ZipEntry(filename); 
    entry.setUnixMode(777); 
    zipoutputstream.putNextEntry(entry); 
  • 最後我明確設置前的即將拉上一個目標文件的文件權限,但是,文件的權限不會複製過來。
Runtime.getRuntime.exec("chmod 777" + file.getCanonicalPath()): 
ZipEntry entry = new ZipEntry(filename); 
zipoutputstream.putNextEntry(entry); 

幫助非常感謝!

+0

Zip不存儲文件權限。當您提取文件時,您將創建新文件。他們將擁有執行解壓縮的用戶的權限。參見[this](http://stackoverflow.com/questions/10735297/maintain-file-and-folder-permissions-inside-archives)。 –

+0

@SotiriosDelimanolis所以如果我在我的bash_profile中設置一個umask,那麼新提取的文件是否具有掩碼設置的權限?因爲即使這似乎並非如此。我設置了一個0027的umask,它將轉換爲rw-r -----,但是當我提取文件時,它們似乎具有rw-r-r--的權限。另外設置提取文件的權限的典型程序是什麼? – rmoh21

+0

我不知道'umask'是幹什麼的。根據您希望文件在提取後擁有哪些權限,請在解壓縮之前更改用戶或編寫一個提取文件的腳本,然後更改解壓縮文件的權限。 –

回答

0

看起來您需要嘗試不同的存檔格式。也許tar --preserve-permissions

另一種選擇是單獨保存權限並在解壓縮時重新應用它們。您可以將.saved_permissions文件添加到存檔。有一些腳本示例可以在StackOverflow上執行此操作。

2

ZIP格式可以將unix權限存儲在ZIP標頭內的「外部屬性」字段中。

另一方面,我已經在裝配描述符中使用<fileMode>0755</fileMode>對使用​​maven-assembly-plugin創建的ZIP文件執行此操作。

要從Java以編程方式提取存檔,同時還保留權限,圍繞commons-compress有一個很好的包裝jarchivelib,它支持多種格式,包括ZIP,tar.gz.它提取正確保留UNIX權限。

相關問題