gpt4 book ai didi

ant - 如何删除另一个目录中不存在的文件?

转载 作者:行者123 更新时间:2023-12-04 05:25:05 26 4
gpt4 key购买 nike

我有两个目录,我们称它们为 srcbuild 。我的构建系统可以正常工作,因此对于所有在 src 中比在 build 中的 mtime 更近的文件,它会将文件从 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>

最佳答案

“有没有办法用 Ant 删除另一个目录中不存在的文件”
是的,使用 delete taskfileset使用 presentselector ,例如

<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使用当前选择器的另一个例子

关于ant - 如何删除另一个目录中不存在的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13290555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com