我有两个目录,我们称之为src
和build
。我的构建系统可以正常工作,因为对于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>
答案 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)