2009-09-21 20 views
42

Tengo un conjunto de archivos poblado y necesito imprimir los nombres de archivo coincidentes en un archivo de texto.¿Cómo puedo imprimir un conjunto de archivos en un archivo, un nombre de archivo por línea?

yo probamos este:

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

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

que imprime todos los archivos en una sola línea, separados por punto y coma. Necesito tener un archivo por línea. ¿Cómo puedo hacer esto sin recurrir a llamar comandos de SO o escribir código de Java?

ACTUALIZACIÓN:

Ah, debería haber sido más específico - la lista no debe contener directorios. Estoy marcando ChssPly76 como la respuesta aceptada de todos modos, ya que el comando pathconvert era exactamente lo que me faltaba. Para quitar los directorios y enumerar solo los nombres de los archivos, utilicé el "flatten" mapper.

Aquí está el script que terminé 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> 

Respuesta

65

Utilice la PathConvert tarea:

<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

La tarea Pathconvert parece crear la ruta absoluta del archivo. ¿Hay alguna posibilidad de evitar esto? Tengo el mismo problema y quiero imprimir una lista de archivos, pero no la ruta completa, sino una relativa (así aplanar no funcionará para mí) – Soccertrash

+1

@Soccertrash, lo resolví con el procesamiento posterior del archivo con ' 'para eliminar el prefijo del directorio base común (en mi caso). – mgaert

+3

@mgaert, puede hacerlo in situ como ' '. Colóquelo dentro de' '. –

0

Desde Ant 1.6 se puede utilizar toString:

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