如何删除不存在在其他目录下的文件?(How to delete files that are not

2019-10-17 09:30发布

我有两个目录,我们姑且称之为srcbuild 。 我的编译系统的工作原理,以便对所有文件的mtime在最近的srcbuild它直接复制文件srcbuid ,并做一些变换(缩小,版本等)。 因为文件被认为是最新的,否则跳过。

然而,这对当源文件被删除,因为其内置的版本中仍然存在的问题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>

Answer 1:

“有没有一种方法来删除使用Ant另一个目录不存在的文件”
是的,使用删除任务与文件集使用presentselector ,FE

<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 /玫瑰花蕾/温度/ DIR1所有文件
对于各地使用的其他方式:

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

还参见https://stackoverflow.com/a/12847012/130683使用本选择另一示例



Answer 2:

在蚂蚁有任务dependdependset这一点。

这些删除目标,其来源是新的,但我想这可能是对你合适。

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

例:

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


文章来源: How to delete files that are not present in another directory?