Ant - копировать только файл без каталога
Мне нужно скопировать все файлы в папку, кроме каталога в этой папке, с помощью Ant script.
Im, используя ниже script, чтобы сделать это.
<copy todir="targetsir">
<fileset dir="srcdir">
<include name="**/*.*"/>
</fileset>
</copy>
Но он копирует все файлы и каталог в эту папку.
как ограничить/фильтровать каталог в этой папке?
спасибо,
Ответы
Ответ 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.