¿Cómo borro un directorio de directorios con Ant?
Pregunta
Quiero eliminar todos los directorios y subdirectorios de un directorio raíz que contienen " tmp " en sus nombres. Esto debería incluir cualquier archivo .svn también. Mi primera suposición es utilizar
<delete>
<dirset dir="${root}">
<include name="**/*tmp*" />
</dirset>
</delete>
Parece que esto no funciona, ya que no puedes anidar un dirset
en una etiqueta delete
.
¿Es este un enfoque correcto o debería estar haciendo otra cosa?
- versión ant == 1.6.5.
- versión de java == 1.6.0_04
Solución
Aquí está la respuesta que funcionó para mí:
<delete includeemptydirs="true">
<fileset dir="${root}" defaultexcludes="false">
<include name="**/*tmp*/**" />
</fileset>
</delete>
Tuve una complicación adicional que necesitaba para eliminar los directorios .svn
también. Con defaultexcludes
, . *
se estaban excluyendo, por lo que los directorios vacíos no estaban realmente vacíos y, por lo tanto, no se eliminaban.
El atributo includeemptydirs
(gracias, flicken, XL-Plüschhase) habilita el comodín **
al final para que coincida con una cadena vacía.
Otros consejos
prueba:
<delete includeemptydirs="true">
<fileset dir="${root}">
<include name="**/*tmp*/*" />
</fileset>
</delete>
¡Gracias flipando!
Solo quería agregar que la parte de la solución que funcionó para mí fue agregar / **
al final de la ruta de inclusión. Intenté lo siguiente para eliminar los directorios de Eclipse .settings:
<delete includeemptydirs="true">
<fileset dir="${basedir}" includes"**/.settings">
</delete>
pero no funcionó hasta que lo cambié a lo siguiente:
<delete includeemptydirs="true">
<fileset dir="${basedir}" includes"**/.settings/**">
</delete>
Por alguna razón, al agregar / **
a la ruta se eliminan los archivos en el directorio correspondiente, todos los archivos en todos los subdirectorios, los subdirectorios y los directorios correspondientes. Al agregar / *
solo se eliminan los archivos en el directorio correspondiente, pero no se eliminará el directorio correspondiente.