Подтвердить что ты не робот

Ant копировать файлы

Есть ли какая-либо команда в ant для копирования файлов из одной структуры папок в другую без проверки последних изменений даты/времени перезаписи файлов. В основном я хочу, чтобы все дополнительные файлы из папки A в папку B. То есть: файлы с заменой B не заменяются, но дополнительные файлы из папки A поступают в папку B.

Я видел команды ant copy "и" ant move ", но не помогал. Любые предложения.

4b9b3361

Ответ 1

Ant Состояние атрибута перезаписи задачи копирования: "Перезаписать существующие файлы, даже если файлы назначения более новые".

Таким образом, установка его в false только предотвращает их перезапись, если они новее, но если исходные файлы новее, они перезаписывают независимо от того, что.

Единственный способ, которым я нашел это, - коснуться файлов назначения перед копированием, т.е.

<touch>
  <fileset dir="${dest.dir}"/>
</touch>
<copy todir="${dest.dir}" overwrite="false">
  <fileset dir="${src.dir}"/>
</copy>

Ответ 2

вы можете сделать это, как показано ниже:

Скопируйте один файл

<copy file="myfile.txt" tofile="mycopy.txt"/>

Скопируйте один файл в каталог

<copy file="myfile.txt" todir="../some/other/dir"/>

Скопировать каталог в другой каталог

< copy todir = "../new/dir" > < fileset dir = "src_dir" /" > </copy>

Скопируйте набор файлов в каталог и многое другое...

см. эту ссылку для получения дополнительной информации. Скопировать задачу

Ответ 3

В то время как <touch> работает, он обновляет даты файла в получателе и, как таковой, это не совсем верно для запроса.

В соответствии с документацией Если у вас есть как минимум Ant 1.6.2, вы можете использовать атрибут детализации.

Число попыток миллисекунд перед выдачей файла устаревший. Это необходимо, потому что не каждая файловая система поддерживает отслеживание последнего измененного времени до уровня миллисекунды. По умолчанию 1 секунды или 2 секунды в системах DOS. Это также может быть полезно, если источник и целевые файлы живут на отдельных машинах с часами, выходящими из синхронизации. поскольку Ant 1.6.2.

просто установите его на большое число. Я использую 9223372036854, который должен быть около 292 лет (вероятно, этого достаточно). (Я просто нарезал последние 6 цифр LongMax), которого достаточно, чтобы не генерировать предупреждения о датах в будущем.

<copy todir="${dest.dir}" overwrite="false" granularity="9223372036854">
  <fileset dir="${src.dir}"/>
</copy>

это гарантирует, что если файлы там вообще, они будут считаться не достаточно старыми с помощью задачи Ant и, следовательно, не будут перезаписаны (а также не затронуты другой задачей).

Ответ 4

Если нет элегантного решения, вы всегда можете сделать это в последовательности:

  • <move> папка <B> до <C>
  • <copy> файлы с папкой <A> до <B>
  • <copy> файлы с папкой <C> до <B> с помощью overwrite=true

(Делайте что-то наоборот, заменив новые файлы, а не старые)

Ответ 5

Просто используйте тег <copy> с набором файлов как **/* и установите для атрибута overwrite значение false явно. Я использую это все время:

<copy todir="/your/target" overwrite="false">
  <fileset dir="/your/source" />
</copy>

Ответ 6

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

    <copy todir="B" verbose="true" overwrite="false">
        <fileset dir="A"/>
    </copy>

Более сложным примером является использование набора файлов selector

    <copy todir="B" verbose="true">
        <fileset dir="A">
            <present targetdir="B" present="srconly"/>
            <date datetime="01/01/2001 12:00 AM" when="after"/>
        </fileset>
    </copy>

В этом примере я использовал селектор present, чтобы выбрать файл, отсутствующий в целевом каталоге (функционально такой же, как проверка перезаписи), и я добавил дополнительный date, чтобы проверить, был ли файл изменен с определенной даты.

Список selector довольно обширен.