2009-10-14 19 views
12

Ho bisogno di copiare tutti i file in una cartella eccetto la directory in quella cartella usando lo script Ant.Ant - copia solo file non directory

Im usando sotto lo script per farlo.

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="**/*.*"/> 
    </fileset> 
</copy> 

Ma copia tutti i file e la directory in quella cartella.

come limitare/filtrare la directory in quella cartella?

grazie,

risposta

10

Vuoi dire che srcdir conatins sub-directory, e non si vuole copiare loro, si vuole solo copiare i file di un livello al di sotto srcdir?

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    <type type="file"/> 
    </fileset> 
</copy> 

Che dovrebbe funzionare. Il "**/*.*" nella tua domanda significa "ogni file in ogni sottodirectory". L'uso di "*" corrisponderà semplicemente ai file in srcdir, non nelle sottodirectory.

Modificato per escludere la creazione di sottodirectory vuote.

+0

Il * di per sé crea le sottodirectory vuote. Non considererei questo comportamento atteso. Vorrei prendere in considerazione @ soluzione di Pavel di seguito per essere quella giusta. – Gatica

1

Puoi provare

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*.*"/> 
    </fileset> 
</copy> 

** viene utilizzato per abbinare una struttura di directory.

-1

Il segreto è utilizzare non set di file ma dirset.

+6

Sospetto che essere più esplicito su ciò che intendi qui sarebbe vantaggioso –

1
<copy todir="targetsir" includeEmptyDirs="false"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    </fileset> 
</copy> 
7

Non ho abbastanza reputazione per commentare, quindi sto scrivendo nuovo post qui. Entrambe le soluzioni per includere name="*" o name="*.*" funzionano bene in generale, ma nessuno di loro è esattamente quello che ci si potrebbe aspettare.

Il primo crea directory vuote presenti nella directory di origine, poiché * corrisponde anche al nome della directory. *.* funziona principalmente in base alla convenzione secondo cui i file non hanno estensione e directory, ma se si nomina la directory my.dir, questo carattere jolly creerà una directory vuota con questo nome.

per farlo correttamente, è possibile sfruttare il selettore <type /> che <fileset /> accetta:

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    <type type="file"/> 
    </fileset> 
</copy> 
22

penso che ci sia un modo più semplice.

flatten="true" - Ignora la struttura di directory della directory di origine, copia tutti i file in una singola directory, specificata dall'attributo todir. L'impostazione predefinita è false.

0

Se la cartella ha molte sottodirectory e non si vuole loro di essere copiati (se si desidera solo file) provare questo ..

<target name="copy"> 
<copy todir="out" flatten="true"> 
<fileset dir="tn"> 
<filename name="**/cit.txt" /> 
</fileset> 
</copy> 
</target> 
+0

Per impostazione predefinita, il valore di appiattimento è impostato su "falso" –