如何删除目录中从其他目录复制的文件?

时间:2011-04-26 01:53:22

标签: ant

我有两个目录,比如A和B.A有几个文件:a1,a2,a3。 B还有几个文件:b1,b2。 首先,我使用以下ant任务将所有文件从B复制到A.

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

然后我要撤消这些步骤,即删除A中从B复制的文件,即b1和b2。我怎样才能实现这些目标?

注意:示例中的文件名仅用于我们理解问题。我不知道两个目录中的确切文件名。

2 个答案:

答案 0 :(得分:7)

您应该使用选择器填充要删除的文件的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>

答案 1 :(得分:0)

虽然之前我从未使用过ant,但可能是从A复制的文件会有当前的时间戳。如果你删除B中带有该时间戳的所有文件,你应该只获得A文件,只需注意linux有的问题。即,不同事物的多个时间戳,如果你复制,你改变一个而不是其他的。

如果这不起作用,也许您可​​以在复制之前将A中文件的所有者设置为特殊所有者。然后从B中删除所有所有者的文件。无论您使用何种解决方案,都将取决于某些数据区分您的A文件与B文件(名称或所有者或时间戳)的事实。如果没有一致的差异,你需要制作一个。