Para cualquier otra persona que llega a esto y necesita código, aquí es una tarea para la sincronización de un lugar con otro basado en el contenido en lugar de marca de tiempo, utiliza un selector modificado en lugar de la de selección diferente en la otra respuesta a dará más control sobre cómo se calculan las diferencias de archivo:
<project name="Demo" default="newSync">
<description>
Sync from ${foo} to ${bar}
</description>
<macrodef name="syncContents">
<attribute name="from"/>
<attribute name="to"/>
<sequential>
<fileset id="selectCopyFiles" dir="@{from}">
<modified algorithm="hashvalue"/>
</fileset>
<fileset id="selectDeleteFiles" dir="@{to}">
<not>
<present targetdir="@{from}"/>
</not>
</fileset>
<copy overwrite="true" todir="@{to}">
<fileset refid="selectCopyFiles"/>
</copy>
<delete includeEmptyDirs="true">
<fileset refid="selectDeleteFiles"/>
</delete>
</sequential>
</macrodef>
<target name="newSync">
<syncContents from="${foo}" to="${bar}"/>
</target>
</project>
Tenga en cuenta que esto hace foo espejo del bar (sincronización A-> B), si desea una sincronización bidireccional puede reemplazar el borrar con una copia de B-> A, y proporciona una tarea de concat para tratar los cambios en el mismo archivo en ambas ubicaciones.
alguna vez la posibilidad de llamar rsync para llevar a cabo la operación de sincronización? – ewh
Gracias por la idea. Estaba buscando una solución basada en hormigas si es posible. –