2010-09-22 15 views
12

Supponiamo che stia eseguendo lo scripting di una distribuzione utilizzando nant su un server Windows in una condivisione di file: \\server\share. Voglio uno script nant per eliminare tutti i file dalla condivisione, quindi copiare in nuovi file.In nant, come eliminare il contenuto di una directory, ma non la directory stessa?

Ho questo codice per eliminare i file, ma sto ricevendo un errore che non può eliminare "\ server \ share". Ma non volevo cancellare la condivisione, solo i contenuti in essa contenuti.

<delete> 
    <fileset basedir="\\server\share"> 
     <include name="**/**" /> 
    </fileset> 
</delete> 

uscita:

 
BUILD FAILED 

D:\code\xxx\xxx.deploy(177,8): 
Cannot delete directory '\\server\share'. 
    Access to the path '\\server\share' is denied. 

Se ho modificato per eliminare invece contenuto di una directory nella condivisione, dicono \\server\share\somedir, sarà eliminare "somedir" senza errori. Ma ancora, non volevo cancellare la dir, solo i contenuti. C'è un modo?

risposta

25

Questo funziona per me - no soluzioni alternative richieste:

<delete> 
    <fileset basedir="\\server\share"> 
     <include name="**\*" /> 
    </fileset> 
</delete> 
+1

Provato questo e ha funzionato! Divertente, non ho mai visto questa sintassi nei documenti di Nant. – spoulson

+4

nant docs kinda suck ... – D3vtr0n

2

È possibile introdurre un tag "escludi" ed escludere un file fittizio. Ciò lascerà intatta la cartella radice.

sto usando il seguente:

<target name="clean"> 
    <delete> 
     <fileset basedir="${DeployTo}"> 
     <include name="**/*" /> 
     <exclude name="**/aspnet_client/**" /> 
     </fileset> 
    </delete> 
    </target> 
0

Prendendo spunto da nsr81, sono stato in grado di venire con questa soluzione che funziona per me:

<touch file="${DeployTo}/deleteme" /> 
<delete> 
    <fileset basedir="${DeployTo}"> 
     <include name="**/**" /> 
     <exclude name="deleteme" /> 
    </fileset> 
</delete> 
<delete file="${DeployTo}/deleteme" />