Вы можете использовать regexp
mapper:
<copy todir="${dest.dir}">
<fileset dir="${src.dir}" casesensitive="yes">
<include name="**/*.pdf"/>
</fileset>
<mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/x/\2" />
</copy>
Я использовал жестко закодированные file.separators для сокращения.По сути, вы разделяете путь к входному файлу (из) на каталог и имя файла (захват \1
и \2
), а затем вставляете дополнительный элемент \x
между ними (в).
I 'На вашем примере это непонятно - похоже, вы хотите сопоставить bar.pdf и переименовать его в foo.pdf, а также изменить каталог.Если вам нужно это сделать, вы можете рассмотреть создание цепочки из нескольких простых сопоставителей регулярных выражений, а не пытаться создать один сложный:
<copy todir="${dest.dir}">
<fileset dir="${src.dir}" casesensitive="yes">
<include name="**/*.pdf"/>
</fileset>
<chainedmapper>
<mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/x/\2" />
<mapper type="regexp" from="^(.*)/(.*\.pdf)" to="\1/foo.pdf" />
</chainedmapper>
</copy>
При использовании сопоставителя glob
, вам необходимо указать один подстановочный знак *
в поле from:
Требуются оба к и от, и определить шаблоны, которые могут содержать не более одного *.Для каждого исходного файла, который соответствует шаблону from, имя целевого файла будет построено из шаблона to, заменив * в шаблоне to текстом, который соответствует * в шаблоне from.Имена исходных файлов, которые не соответствуют шаблону from, будут игнорироваться.
Так что-то подобное может работать:
<mapper type="glob" from="*/foo.pdf" to="*/x/foo.pdf" />