2009-09-21 21 views
42

Ho un set di file popolato e ho bisogno di stampare i nomi di file corrispondenti in un file di testo.Come posso stampare un set di file su un file, un nome di file per riga?

ho provato questo:

<fileset id="myfileset" dir="../sounds"> 
    <include name="*.wav" /> 
    <include name="*.ogg" /> 
</fileset> 

<property name="sounds" refid="myfileset" /> 
<echo file="sounds.txt">${sounds}</echo> 

che stampa tutti i file su una singola linea, separati da un punto e virgola. Ho bisogno di avere un file per riga. Come posso farlo senza ricorrere ai comandi del SO o alla scrittura del codice Java?

UPDATE:

Ah, avrebbe dovuto essere più preciso - l'elenco non deve contenere le directory. Segnalo ChssPly76 come risposta accettata comunque, dal momento che il comando pathconvert era esattamente quello che mi mancava. Per rimuovere le directory ed elencare solo i nomi dei file, ho utilizzato lo "flatten" mapper.

Ecco lo script che ho finito con:

<fileset id="sounds_fileset" dir="../sound"> 
    <include name="*.wav" /> 
    <include name="*.ogg" /> 
</fileset> 

<pathconvert pathsep="&#xA;" property="sounds" refid="sounds_fileset"> 
    <mapper type="flatten" /> 
</pathconvert> 

<echo file="sounds.txt">${sounds}</echo> 

risposta

65

utilizzare l'attività PathConvert:

<fileset id="myfileset" dir="../sounds"> 
    <include name="*.wav" /> 
    <include name="*.ogg" /> 
</fileset> 

<pathconvert pathsep="${line.separator}" property="sounds" refid="myfileset"> 
    <!-- Add this if you want the path stripped --> 
    <mapper> 
     <flattenmapper /> 
    </mapper> 
</pathconvert> 
<echo file="sounds.txt">${sounds}</echo> 
+0

Il compito Pathconvert sembra creare il percorso del file assoluto. C'è una possibilità di impedirlo? Ho lo stesso problema e voglio stampare un elenco di file ma non il percorso completo ma un percorso relativo (quindi non appiattirò per me) – Soccertrash

+1

@Soccertrash, ho risolto questo con il post-processing del file con ' 'per rimuovere il prefisso dir base comune (nel mio caso). – mgaert

+3

@mgaert, puoi farlo sul posto come ' '. Inseriscilo entro' '. –

0

Dal Ant 1.6 è possibile utilizzare toString:

<echo file="sounds.txt">${toString:myfileset}</echo>