Come posso eliminare un dirset di directory con Ant?
Domanda
Voglio eliminare tutte le directory e le sottodirectory in una directory radice che contiene " tmp " nei loro nomi. Ciò dovrebbe includere anche qualsiasi file .svn. La mia prima ipotesi è di usare
<delete>
<dirset dir="${root}">
<include name="**/*tmp*" />
</dirset>
</delete>
Questo non sembra funzionare poiché non puoi nidificare un dirset
in un tag delete
.
È un approccio corretto o dovrei fare qualcos'altro?
- versione ant == 1.6.5.
- versione java == 1.6.0_04
Soluzione
Ecco la risposta che ha funzionato per me:
<delete includeemptydirs="true">
<fileset dir="${root}" defaultexcludes="false">
<include name="**/*tmp*/**" />
</fileset>
</delete>
Ho avuto un'ulteriore complicazione di cui avevo bisogno per rimuovere anche le directory .svn
. Con defaultexcludes
, i file . *
venivano esclusi e quindi le directory vuote non erano realmente vuote e quindi non venivano rimosse.
L'attributo includeemptydirs
(grazie, sfarfallio, XL-Plüschhase) consente al carattere jolly **
finale di abbinare una stringa vuota.
Altri suggerimenti
Prova:
<delete includeemptydirs="true">
<fileset dir="${root}">
<include name="**/*tmp*/*" />
</fileset>
</delete>
Grazie, sfarfallio!
Volevo solo aggiungere che la parte della soluzione che funzionava per me stava aggiungendo / **
alla fine del percorso di inclusione. Ho provato quanto segue per eliminare le directory .settings di Eclipse:
<delete includeemptydirs="true">
<fileset dir="${basedir}" includes"**/.settings">
</delete>
ma non ha funzionato fino a quando non l'ho modificato come segue:
<delete includeemptydirs="true">
<fileset dir="${basedir}" includes"**/.settings/**">
</delete>
Per qualche motivo, l'aggiunta di / **
al percorso elimina i file nella directory corrispondente, tutti i file in tutte le sottodirectory, le sottodirectory e le directory corrispondenti. L'aggiunta di / *
elimina solo i file nella directory corrispondente ma non elimina la directory corrispondente.