2011-04-26 89 views
5

我有兩個目錄,比如A和B.A有幾個文件:a1,a2,a3。 B還有幾個文件:b1,b2。 首先,我用下面的Ant任務中的所有文件的B複製到A.如何刪除從其他目錄複製的目錄中的文件?

<copy todir="A" verbose="true"> 
    <fileset dir="B" includes="*"/> 
</copy> 

然後我想撤消步驟,即刪除其中一個文件從B,即b1和b2被複制。我怎樣才能達到目標?

注意:示例中的文件名僅用於我們理解問題。我不知道兩個目錄中的確切文件名。

回答

7

您應該使用Selector來填充要刪除的文件的FileSet。試試Present Selector。這裏有一個目標來補充你的例子:

<target name="copy" > 
<copy todir="A" verbose="true"> 
    <fileset dir="B" includes="*"/> 
</copy> 
</target> 

<target name="uncopy" > 
<delete verbose="true"> 
    <fileset dir="A" > 
     <present present="both" targetdir="B"/> 
    </fileset> 
</delete> 
</target> 
+0

這正是我想要的。非常感謝你。 – adarliu 2011-04-27 06:38:48

+0

很高興幫助!通常的做法是通過選中它來接受答案(請參閱http://stackoverflow.com/faq#howtoask)。它有助於他人在未來找到答案。 – DoctorRuss 2011-04-27 13:01:26

0

雖然我以前從未使用過ant,但是從A複製的文件可能有當前的時間戳。如果使用該時間戳從B中刪除所有文件,則應該只獲取A文件,只需注意linux存在的問題。也就是說,對於不同的事情有多個時間戳,如果你複製你改變一個而不是其他的。

如果這樣做不起作用,也許您可​​以在複製之前將A中文件的所有者設置爲特殊所有者。然後從B中刪除所有者的所有文件。無論使用哪種解決方案,都取決於某些數據區分A文件和B文件的名稱或所有者或時間戳。如果沒有一致的差異,則需要製作一個。

+0

那麼,如果我稍後更改文件,用時間戳區分文件與A和B將不起作用。我想按名稱從B中刪除文件。不管怎樣,謝謝你。 – adarliu 2011-04-26 05:27:20

相關問題