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