如何删除其他目录中不存在的文件?

时间:2012-11-08 14:06:34

标签: ant delete-file fileset

我有两个目录,我们称之为srcbuild。我的构建系统可以正常工作,因为对于src中mtime比build更新的所有文件,它会将文件从src复制到buid并执行一些转换(缩小,版本控制)等)。否则跳过,因为文件被认为是最新的。

这会在删除源文件时出现问题,因为它的内置版本仍然存在于build中并且会进入之后生成的地图文件中。

$ ls src
example1.js
example2.js

$ ant do-the-stuff
...

$ ls build
example1.js
example1-12345.min.js
example2.js
example2-23456.min.js
.map

$ cat .map
example1.js=example1-12345.min.js
example2.js=example2-23456.min.js

$ rm src/example2.js
$ ant do-the-stuff
...

$ cat .map
example1.js=example1-12345.min.js
example2.js=example2-23456.min.js

有没有办法用Ant删除其他目录中不存在的文件?从集合论的角度来看,这是一个简单的A \ B操作。

这是我已经尝试过的,但没有奏效:

<delete dir="build">
    <exclude name="src/*" />
</delete>

<delete dir="build">
    <exclude>
        <fileset name="src" />
    </exclude>
</delete>

<delete dir="build">
    <fileset dir="build/*">
        <not>
            <present targetdir="src" />
        </not>
    </fileset>
</delete>

2 个答案:

答案 0 :(得分:3)

“有没有办法删除Ant中没有出现在另一个目录中的文件” 是的,使用delete task使用fileset使用presentselector,f.e。

<fileset dir="/home/rosebud/temp/dir1" includes="*.jar" id="srcfileset">
 <present present="srconly" targetdir="/home/rosebud/temp/dir2"/>
</fileset>
<echo>Files only in /home/rosebud/temp/dir1 => ${toString:srcfileset}</echo>
<delete>
 <fileset refid="srcfileset"/>
</delete>

将删除仅存在于/ home / rosebud / temp / dir1中的所有文件 反之亦然:

...
 <not>
  <present present="srconly" targetdir="/home/rosebud/temp/dir2"/>
 </not>
...

另请参阅https://stackoverflow.com/a/12847012/130683了解使用当前选择器的另一个示例

答案 1 :(得分:0)

在Ant中,有dependdependset任务。

这些删除目标的来源较新,但我想这对你来说可能没问题。

在这个非常具体的案例中,depend似乎是正确的。

示例:

<depend srcdir="src" destdir="build"/>