2009-09-21 6 views
42

J'ai un ensemble de fichiers rempli et j'ai besoin d'imprimer les noms de fichiers correspondants dans un fichier texte.Comment imprimer un ensemble de fichiers dans un fichier, un nom de fichier par ligne?

J'ai essayé ceci:

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

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

qui imprime tous les fichiers sur une seule ligne, séparés par des points-virgules. Je dois avoir un fichier par ligne. Comment puis-je faire cela sans recourir à l'appel de commandes OS ou à l'écriture de code Java?

MISE À JOUR:

Ah, aurait dû être plus précis - la liste ne doit pas contenir des répertoires. Je marque quand même la réponse acceptée de ChssPly76, puisque la commande pathconvert était exactement ce qui me manquait. Pour supprimer les répertoires et ne répertorier que les noms de fichiers, j'ai utilisé le "flatten" mapper.

Voici le script que j'ai fini avec:

<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> 

Répondre

65

Utilisez la tâche 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

La tâche Pathconvert semble créer le chemin absolu du fichier. Est-il possible d'empêcher cela? J'ai le même problème et je veux imprimer une liste de fichiers mais pas le chemin complet mais un chemin relatif (donc aplatir ne fonctionnera pas pour moi) – Soccertrash

+1

@Soccertrash, j'ai résolu ceci avec post-traitement du fichier avec ' 'pour supprimer le préfixe de base commune (dans mon cas). – mgaert

+3

@mgaert, vous pouvez le faire sur place comme '. Placez-le dans ''. –

0

Depuis Ant 1.6 vous pouvez utiliser toString:

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