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



我有两个目录,我们称它们为 srcbuild。我的构建系统可以正常工作,因此,对于src中MTIME最近的所有文件,它都比build更新的文件将文件从src复制到buid,并进行了一些转换(Minification,Minification,Menification,版本控制等)。否则,当将文件视为最新时,请跳过。

然而,当删除源文件时,这会提出一个问题,因为它的构建版本仍然存在于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>

"是否有一种方法可以删除其他目录中不存在的文件"

是的,使用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/home/rosebud/temp/dir1
中的所有文件另一种方式使用:

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

另请参见https://stackoverflow.com/a/12847012/130683有关使用当前选择器

的另一个示例

在蚂蚁中有任务dependdependset

这些来源更新的删除目标,但我想这对您可能还可以。

在这种非常具体的情况下,depend似乎是正确的。

示例:

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

相关内容

  • 没有找到相关文章

最新更新