Как я могу синхронизировать две папки с помощью Ant? - PullRequest
0 голосов
/ 10 марта 2010

Допустим, я скопировал некоторые файлы с помощью ant с сетевого диска:

<copy todir="." verbose="true">
   <fileset dir="some_directory" includes="**/*"/>
</copy>

Допустим, я проверяю, существует ли папка первой.

<available file="${dir.local}" property="dir.exists"/>

Если у меня есть папка на моем компьютере, я хотел бы копировать только измененные файлы. Есть ли способ сохранить up2date с версией, которая существует на сервере?

РЕДАКТИРОВАТЬ: я знаю о задаче синхронизации. Дело в том, что если мои локальные файлы изменены, синхронизация не копирует их. Есть ли способ обойти это поведение или есть другая задача, которая может это сделать?

EDIT2: вот код, измененный в соответствии с предложениями Питера:

<target name="copy">
  <echo>${dir.remote}</echo>
  <copy todir="${dir.local}" verbose="true" overwrite="true" 
  preservelastmodified="true">
     <fileset dir="${dir.remote}">
        <include name="**/*"/>
     </fileset>
  </copy>
</target>

Это, однако, копирует все файлы. Это не только замена модифицированных.

Ответы [ 2 ]

7 голосов
/ 19 сентября 2011

Начиная с Apache Ant 1.6 вы можете использовать задачу синхронизации для синхронизации ваших папок. Пример:

    <sync todir="site">
      <fileset dir="genereted-site" />
    </sync>

Посетите http://ant.apache.org/manual/Tasks/sync.html для получения дополнительной информации.

3 голосов
/ 10 марта 2010

Редактировать: Я могу ошибаться, но я не думаю, что такая задача существует.

Один из способов сделать это - написать собственную задачу Ant , расширяющую задачу Copy и переопределяющую copySingleFile, которая проверяет отметку времени:

if (forceOverwrite || !destFile.exists()
    || (file.lastModified() - granularity > destFile.lastModified())) {

Ant copy не перезаписывает существующие файлы, если источник не является более новым:

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

Используйте preservelastmodified, чтобы убедиться, что метки времени совпадают.

...