Как удалить dirset каталогов с помощью Ant?
Я хочу удалить все каталоги и подкаталоги в корневом каталоге, которые содержат "tmp" в своих именах. Сюда также должны входить любые .svn файлы. Мое первое предположение - использовать
<delete>
<dirset dir="${root}">
<include name="**/*tmp*" />
</dirset>
</delete>
Это не работает, поскольку вы не можете вставить dirset
в тег delete
.
Правильно ли это, или я должен делать что-то еще?
- ant версия == 1.6.5.
- версия java == 1.6.0_04
Ответы
Ответ 1
Вот ответ, который сработал у меня:
<delete includeemptydirs="true">
<fileset dir="${root}" defaultexcludes="false">
<include name="**/*tmp*/**" />
</fileset>
</delete>
У меня появилось дополнительное осложнение, которое мне понадобилось для удаления каталогов .svn
. С defaultexcludes
, файлы .*
были исключены, поэтому пустые каталоги не были действительно пустыми и поэтому не удалялись.
Атрибут includeemptydirs
(спасибо, flicken, XL-Plüschhase) позволяет подстановочному шаблону **
соответствовать пустой строке.
Ответ 2
попробовать:
<delete includeemptydirs="true">
<fileset dir="${root}">
<include name="**/*tmp*/*" />
</fileset>
</delete>
Спасибо, Флик!
Ответ 3
Я просто хотел добавить, что часть решения, которая работала для меня, добавляла /**
в конец пути include. Я попробовал следующее, чтобы удалить каталоги Eclipse.settings:
<delete includeemptydirs="true">
<fileset dir="${basedir}" includes"**/.settings">
</delete>
но это не сработало, пока я не изменил его на следующее:
<delete includeemptydirs="true">
<fileset dir="${basedir}" includes"**/.settings/**">
</delete>
По какой-то причине добавление /**
к пути удаляет файлы в соответствующем каталоге, все файлы во всех подкаталогах, подкаталогах и соответствующих каталогах. Добавление /*
удаляет только файлы в соответствующем каталоге, но не удаляет соответствующий каталог.