Как удалить одну папку во время муравьиного копирования

#ant

#ant

Вопрос:

У меня есть файл, пути к которому имеют вид «LibraryX/A/Stuff/FileY.txt «, который я использую как includesfile в Ant build. Однако мне нужно удалить часть пути «LibraryX / A /» ВО время процесса копирования: файл копируется из «LibraryX/A/Stuff/FileY.txt «и попадает в «Stuff/FileY.txt «. Я просмотрел несколько regexpmappers, но не добился с ними никакого успеха вообще. :/

Целью этого является то, что в целевой папке могут быть перезаписаны пользовательские файлы в «Stuff / MoreStuff», и я хочу использовать overwrite = «false», чтобы свести доступ к диску к минимуму и сохранить пользовательские файлы нетронутыми.

Ant:

 <copy todir="C:/targetdir/" overwrite="false">
    <fileset dir="C:/sourcedir/">
        <includesfile name="C:/targetdir/includes.file" />
    </fileset>
</copy>
  

Включает в себя.file:

 LibraryX/A/Stuff/FileA.txt
LibraryX/A/Stuff/FileB.txt
LibraryX/A/Stuff/FileC.txt
LibraryX/A/Stuff/FileY.txt
  

Sourcedir:

 sourcedir/LibraryX/A/Stuff/FileA.txt
sourcedir/LibraryX/A/Stuff/FileB.txt
sourcedir/LibraryX/A/Stuff/FileC.txt
sourcedir/LibraryX/A/Stuff/FileY.txt
  

Целевой каталог:

 targetdir/Stuff/FileY.txt
  

Теперь все файлы в папке Stuff в sourcedir должны заканчиваться в папке Stuff в targetdir. Но как?

Бонус: Если я перемещу файлы из «targetdir /LibraryX /A / Stuff», они перезапишут все в папке «targetdir / Stuff», даже с overwrite =»false». Предположительно, потому что это более новые файлы, чем те, что находятся в папке Stuff в настоящее время.

Примечание: Я мог бы, конечно, переместить пользовательские файлы из целевого каталога, скопировать содержимое, а затем переместить пользовательские файлы обратно, перезаписав новые. Но это приводит к значительному обращению к диску, замедляя процесс.

Ответ №1:

Начиная с Ant версии v1.8.2, вы можете использовать cutdirsmapper для удаления некоторого количества ведущих каталогов из путей к файлам. Смотрите в самом низу документов типа mapper.

 <copy todir="C:/targetdir/" overwrite="false">
    <fileset dir="C:/sourcedir/">
        <includesfile name="C:/targetdir/includes.file" />
    </fileset>
    <cutdirsmapper dirs="2"/>
</copy>
  

Бонус: Вы могли бы использовать задачу ant touch, чтобы сделать все файлы в targetdir более новыми, чем все исходные файлы, и, следовательно, предотвратить их перезапись.

Комментарии:

1. Это в значительной степени суммировало то, что мне было нужно: cutdirsmapper делает именно то, что нужно, и я могу использовать touch для старых версий Ant. Спасибо!

2. я использую ANT версии v1.8.2, хотя я получаю сообщение об ошибке, подобное copy doesn't support the nested "cutdirsmapper" element Пожалуйста, помогите мне