Ant - копирование файлов и подкаталогов только из одного подкаталога в дереве - PullRequest
6 голосов
/ 21 июня 2011

Я хотел бы скопировать файлы и подкаталоги с помощью Ant из одного подкаталога, не копируя остальную часть структуры и содержимого каталога. Например, я хотел бы скопировать dir_3, его файлы (file_1 to file_n) и подкаталоги (dir_4 и dir_5), но не dir_1 и не dir_2. Есть ли шаблон, который я могу использовать для этого?

temp
   \--dir_1
   \--dir_2
       |
       \--dir_3
           |
           \--dir_4
           \--dir_5
           \-- file_1
           |
           \--file_n

Спасибо.

Ответы [ 2 ]

18 голосов
/ 22 июня 2011

Это не так сложно ...

<copy todir="${copy.dir}">
     <fileset dir="temp">
         <include name="**/dir3/**"/>
     </fileset>
</copy>

Когда вы используете директиву include, она будет включать только те файлы, которые соответствуют заданному вами шаблону. В этом случае я копирую только те файлы, которые имеют /dir3/ где-то в своем полном пути. Это включает подкаталоги под dir3 и все файлы под dir3.

Вы можете использовать директиву exclude для переопределения директив include:

<copy todir="${copy.dir}">
     <fileset dir="temp">
         <include name="**/dir3/**"/>
         <exclude name="**/dir3/*"/>
     </fileset>
</copy>

Это скопирует все подкаталоги и файлы в этих подкаталогах, но не файлы в самом dir3. * соответствует всем файлам в каталоге, в то время как ** соответствует всем файлам во всем дереве каталогов.

Обратите внимание, что это создаст каталог temp/dir2/dir3. Если я хочу temp/dir3, я должен установить свой набор файлов в родительский каталог dir3:

<copy todir="${copy.dir}">
     <fileset dir="temp/dir2">
         <include name="dir3/**"/>
     </fileset>
</copy>

Делаем это:

<copy todir="${copy.dir}">
     <fileset dir="temp/dir2/dir3"/>
</copy>

Создает каталог temp со всеми файлами непосредственно в dir3 непосредственно в temp. Также будет каталог temp/dir4 и temp/dir5, содержащий все файлы (и деревья каталогов) в этих каталогах.

1 голос
/ 22 июня 2011
<copy todir="/some/path/foobar" verbose="true">
  <fileset dir="/some/path/temp/dir2" includes="**"/>
</copy>

просто используйте набор файлов, начиная с dir2, включая все каталоги и файлы ниже.
verbose = true, чтобы отобразить все скопированные файлы
Может быть, вам нужно использовать overwrite = true также, если каталог, которыйзадается атрибутом todir
, который уже существует, в противном случае существующие файлы не будут перезаписаны задачей копирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...