【问题标题】:How to delete files that are not present in another directory?如何删除另一个目录中不存在的文件?
【发布时间】:2012-11-08 14:06:34
【问题描述】:

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

【问题讨论】:

    标签: ant delete-file fileset


    【解决方案1】:

    “有没有办法用 Ant 删除另一个目录中不存在的文件”
    是的,使用 delete taskfileset 使用 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 以了解使用当前选择器的另一个示例

    【讨论】:

      【解决方案2】:

      在 Ant 中有任务 dependdependset 用于此。

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

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

      例子:

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

      【讨论】:

      • 我认为它与我想要的相反。我在保持现有文件同步方面没有问题。但是我需要从 src/ 中删除那些 DELETED,这样它们就不会留在 build/ 中,也不会进入地图文件。
      猜你喜欢
      • 1970-01-01
      • 2015-12-06
      • 2021-01-22
      • 2015-02-04
      • 2013-05-23
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多