#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
Пожалуйста, помогите мне