2009-10-04 45 views

回答

12

我不認爲有一種方法可以保留現有的權限,每本說明從copy task

的Unix注:當文件被複制文件權限不保留;他們最終會使用默認的UMASK權限。這是由於缺乏在當前Java運行時中查詢或設置文件權限的手段而造成的。如果您需要保留權限複製功能,請改爲使用<exec executable="cp" ... >

但是,tar task可以採取一個或多個tarfileset元素。可以使用filemode和/或dirmode屬性來定義tarfileset以指定unix權限。如果指定多個包含僅匹配那些文件以獲取每組必需的權限,則該組中的文件將包含在這些權限中。

11

這種權限的缺乏使得ant tar任務幾乎對我無用。有沒有辦法做到這一點不與EXEC任務執行操作系統焦油

<exec executable="tar" output="/dev/null" os="Linux"> 
     <arg value="--exclude-from=files_to_exclude.txt"/> 
     <arg value="-cvz"/> 
     <arg value="--file=${file.tar}"/> 
     <arg value="."/> 
    </exec> 

有將近人類已知的所有操作系統的GNU tar二進制文件。將其中一個放入您的版本控制系統並根據您的操作系統使用它。是的,Ant每次運行時都需要分離一個進程。

+0

這是爲什麼downvoted?這個問題的完美解決方案 - upvoting – purecharger 2010-11-17 18:09:37

+3

這很可能是因爲回答者沒有讀到這個問題而被低估:「當然可以使用exec任務完成」 – 2011-03-30 21:11:19

+0

ant tar完全沒用。我明白爲什麼(Java不能讀取文件權限或一些垃圾),但這並不使它有用,因爲我想tar來重寫所有權限。這應該是正確的答案。 – Chris 2011-05-23 17:15:54

6

使用tarfileset爲我們的項目工作。下面是萬一有人需要它的工作示例:

<tar destfile="${dist}/${module.name}-${version}.tar"> 
     <tarfileset dir="${package.dir}" filemode="550" includesfile="${home.dir}/includelist.txt"> 
      <include name="*.sh"/> 
     </tarfileset> 
    </tar> 

在這個例子中,includelist.txt用來告訴哪些文件在tar文件中包含。所有帶* .sh擴展名的文件都具有用戶和組的讀取和執行權限(550)。

希望這可以幫助別人。

+0

讓我猜:ivy + git存儲庫?因爲這就是我引起這個問題的原因。 – bassim 2014-10-12 12:36:00

+0

這應該是答案!這是做到這一點的正確方法 – 2016-03-03 19:28:05

相關問題