NAnt: Как заменить набор файлов из другого каталога - PullRequest
2 голосов
/ 10 мая 2011

Мне нужно заменить все файлы, содержащиеся в dir, всеми файлами, существующими в другом.

Это будет псевдокод для этой задачи:

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

Мне нужнозаменить файл, только если он существует в /foo/var и /other/dir.Также существуют файлы, которые существуют в /foo/var и не существуют в /other/dir и наоборот.

Каков наилучший способ сделать это с помощью NAnt?

Ответы [ 2 ]

2 голосов
/ 15 мая 2011

Это должно сделать работу. Он будет только просматривать файлы в корневом каталоге назначения и игнорировать подпапки. Потребуется немного больше работы, если вы хотите включить файлы в подпапки

<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>

Я проверил это с Nant 0.86

1 голос
/ 13 мая 2011

Я думаю, вы могли бы в значительной степени использовать свой пример псевдокода. См. задачу foreach и задачу копирования . И функции манипуляции пути .

...