开发者

NAnt: How to replace a set of files from other directory

开发者 https://www.devze.com 2023-03-03 23:29 出处:网络
I need to replace all the files contained in a dir with all the files that exists in other. This would be a pseudo code for this task:

I need to replace all the files contained in a dir with all the files that exists in other.

This would be a pseudo code for this task:

  foreach (string file in /foo/var)
  {
    srcFile = "/other/dir/" + GetFileName(file);
    Copy(srcFile, file);
  }

I need to repla开发者_开发问答ce the file only if exists in both /foo/var and /other/dir. Also there are files that exist in /foo/var and do not exist in /other/dir and vice versa.

What is the best way to do it with NAnt?


This should do the job. It will only look at files in the root target directory and ignore subfolders. It will need a bit more work if you want it to include files in subfolders

<project name="Sync" default="sync" xmlns="http://nant.sf.net/release/0.85/nant.xsd">

  <property name="source.path" value="D:\test\source\" />
  <property name="target.path" value="D:\test\target\" />

  <target name="sync" description="Copies only the matching files to a folder">
    <foreach item="File" property="targetFile">
      <in>
        <items basedir="${target.path}"> <!-- include all files from the target path -->
          <include name="*" /> <!-- this will not include subfolders -->
        </items>
      </in>
      <do>
        <if test="${file::exists(source.path + path::get-file-name(targetFile))}">
            <copy 
                file="${source.path + path::get-file-name(targetFile)}"
                tofile="${targetFile}"
                overwrite="true"
                 />
        </if>
      </do>
    </foreach>
    </target>
</project>

I tested it with Nant 0.86


I think you could pretty much use your pseudocode example. See the foreach task and the copy task. And the path manipulation functions.

0

精彩评论

暂无评论...
验证码 换一张
取 消