如何只处理已更改的文件?

时间:2009-07-14 02:21:44

标签: ant

目前我正在这样做:

<delete dir="${RSA.dir}/file1" />
<copy todir="${RSA.dir}/file1" >
    <fileset dir="${CLEARCASE.dir}/file1" />            
</copy>

并为其他文件重复同样的事情 - 但这需要很长时间。

我只想删除和复制已更新的文件,其修改日期晚于RSA中的明确日期。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

查看sync任务。

如果你想根据文件内容进行操作,并忽略时间戳,我认为这个宏会这样做:

<macrodef name="mirror" description="Copy files only if different; remove files that do not exist in dir. This works similiar to robocopy /MIR." >
    <attribute name="dir"/>
    <attribute name="todir"/>
    <sequential>
        <copy overwrite="true" todir="@{todir}">
            <fileset dir="@{dir}">
                <different targetdir="${todir}"/>
            </fileset>
        </copy>
        <delete includeemptydirs="true">
            <fileset dir="@todir}">
                <present targetdir="${dir}" present="srconly"/>
            </fileset>                
        </delete>
    </sequential>
</macrodef>

答案 1 :(得分:4)

您需要在FileSet上使用selector。像这样:

<fileset dir="${your.working.dir}/src/main" includes="**/*.java">
    <different targetdir="${clean.clearcase.checkout}/src/main"
        ignoreFileTimes="false"
        ignoreContents="true" />
</fileset>

将您的工作目录与您在其他地方的清理结帐进行比较,并返回上次修改时间已更改的文件。您可以将文件集用作<delete><copy>

的参数