Como excluo um Diret de diretórios com Ant?
Pergunta
Quero excluir todos os diretórios e subdiretórios sob um diretório raiz que contêm "TMP" em seus nomes. Isso também deve incluir quaisquer arquivos .svn. Meu primeiro palpite é usar
<delete>
<dirset dir="${root}">
<include name="**/*tmp*" />
</dirset>
</delete>
Isso não parece funcionar, pois você não pode nidificar um dirset
em um delete
marcação.
Esta é uma abordagem correta ou devo fazer outra coisa?
- versão da formiga == 1.6.5.
- versão java == 1.6.0_04
Solução
Aqui está a resposta que funcionou para mim:
<delete includeemptydirs="true">
<fileset dir="${root}" defaultexcludes="false">
<include name="**/*tmp*/**" />
</fileset>
</delete>
Eu tive uma complicação adicional que eu precisava para remover .svn
diretórios também. Com defaultexcludes
, .*
Os arquivos estavam sendo excluídos e, portanto, os diretórios vazios não estavam realmente vazios e, portanto, não estavam sendo removidos.
O atributo includeemptydirs
(obrigado, Flicken, XL-Plüschhase) Ativa a direita **
Wildcard para combinar com a corda vazia.
Outras dicas
tentar:
<delete includeemptydirs="true">
<fileset dir="${root}">
<include name="**/*tmp*/*" />
</fileset>
</delete>
Obrigado Flicken!
Eu só queria acrescentar que a parte da solução que funcionou para mim estava anexando /**
até o final do caminho de incluir. Eu tentei o seguinte para excluir os diretórios do Eclipse.
<delete includeemptydirs="true">
<fileset dir="${basedir}" includes"**/.settings">
</delete>
Mas não funcionou até que eu mudei para o seguinte:
<delete includeemptydirs="true">
<fileset dir="${basedir}" includes"**/.settings/**">
</delete>
Por algum motivo anexando /**
Para o caminho, exclui os arquivos no diretório correspondente, todos os arquivos em todos os subdiretos, subdiretos e diretórios correspondentes. Anexando /*
Somente exclui arquivos no diretório correspondente, mas não excluirá o diretório correspondente.