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

Ant - копировать только файл без каталога

Мне нужно скопировать все файлы в папку, кроме каталога в этой папке, с помощью Ant script.

Im, используя ниже script, чтобы сделать это.

<copy todir="targetsir">
  <fileset dir="srcdir">
     <include name="**/*.*"/>
  </fileset>
</copy>

Но он копирует все файлы и каталог в эту папку.

как ограничить/фильтровать каталог в этой папке?

спасибо,

4b9b3361

Ответ 1

Вы имеете в виду подкатегории srcdir conatins, и вы не хотите их копировать, вы просто хотите скопировать файлы на один уровень ниже srcdir?

<copy todir="targetsir">
  <fileset dir="srcdir">
     <include name="*"/>
     <type type="file"/>
  </fileset>
</copy>

Это должно сработать. "**/*.*" в вашем вопросе означает "каждый файл под каждым вспомогательным каталогом". Просто использование "*" будет просто соответствовать файлам под srcdir, а не подкаталогам.

Отредактировано для исключения создания пустых подкаталогов.

Ответ 2

Я думаю, что есть более простой способ.

flatten="true" - Игнорировать структуру каталогов исходного каталога, скопировать все файлы в один каталог, указанный атрибутом todir. По умолчанию используется false.

Ответ 3

У меня недостаточно репутации, чтобы комментировать, поэтому я пишу новое сообщение здесь. Оба решения для включения name="*" или name="*.*" работают нормально в целом, но ни один из них не является именно тем, что вы ожидаете.

Первый создает пустые каталоги, которые присутствуют в исходном каталоге, так как * также совпадает с именем каталога. *.* работает в основном потому, что соглашение, в котором файлы имеют расширение и каталоги, но не указано, но если вы назовете свой каталог my.dir, этот шаблон будет создавать пустую директорию с этим именем.

Чтобы сделать это правильно, вы можете использовать селектор <type />, который <fileset /> принимает:

<copy todir="targetsir"> 
  <fileset dir="srcdir"> 
     <include name="*"/> 
     <type type="file"/>
  </fileset> 
</copy>

Ответ 4

Можете ли вы попробовать

<copy todir="targetsir"> 
  <fileset dir="srcdir"> 
     <include name="*.*"/> 
  </fileset> 
</copy> 

** используется для соответствия структуре каталогов.

Ответ 5

<copy todir="targetsir" includeEmptyDirs="false"> 
  <fileset dir="srcdir"> 
     <include name="*"/> 
  </fileset> 
</copy>

Ответ 6

Если в вашей папке много подкаталогов, и вы не хотите, чтобы их копировали (если вы хотите только файлы), попробуйте это.

<target name="copy">
<copy todir="out" flatten="true">
<fileset dir="tn">
<filename name="**/cit.txt" />
</fileset>
</copy>
</target>

Ответ 7

Секрет состоит в том, чтобы вместо этого использовать не набор файлов, а dirset.