【问题标题】:How do I copy a directory in Ant without deleting existing files in the destination directory?如何在 Ant 中复制目录而不删除目标目录中的现有文件?
【发布时间】:2012-01-11 00:58:13
【问题描述】:

我的文件结构如下:

  • 要复制的文件夹
    • 文件夹 1
      • 一些文件1
      • somefile2

我正在将 FolderToBeCopied 复制到已包含文件的位置:

  • 目标文件夹
    • 文件夹 1
      • 另一个文件1
      • 另一个文件2

我在我的 Ant 构建脚本中使用以下内容进行复制:

<copy overwrite="true" todir="DestinationFolder">
            <fileset dir="FolderToBeCopied" includes="**">
            </fileset>
        </copy>

但是,当我运行构建脚本时,它会将文件 somefile1 和 somefile2 复制到目标文件夹 1,但会删除文件夹 1 中已经存在的文件(即另一个文件 1、另一个文件 2)。有没有办法防止它删除目标文件夹中已经存在的文件?

【问题讨论】:

    标签: ant build copy build-process


    【解决方案1】:

    是的:在您的构建脚本中找到 delete 元素,该元素会删除 DestinationFolder 并将其删除。

    copy doesn't deleteoverwrite 仅表示“即使目标比源更旧也要复制”​​。

    【讨论】:

    • 另一种可能性是destinationFolder 最初不存在。然后它可以让人认为它被删除了。
    【解决方案2】:

    为了防止删除目标文件夹中的现有文件,您可以进行备份,在文件名后附加时间戳:

    <project name="demoSO" basedir=".">
    
       <tstamp>
        <format property="touch.time" pattern="yyMMddHHmmssSSS"/>
      </tstamp>
    
      <target name="copyMyFiles">
        <copy todir="DestinationFolder" includeemptydirs="false">
          <fileset dir="FolderToBeCopied">
          </fileset>
          <mapper type="glob" from="*" to="*-${touch.time}"/>
        </copy>
      </target>
    
    </project>
    

    【讨论】: