2009-09-21 8 views
42

Ich habe eine Dateigruppe und ich muss die passenden Dateinamen in eine Textdatei drucken.Wie kann ich eine Dateigruppe in eine Datei drucken, einen Dateinamen pro Zeile?

Ich versuchte dies:

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

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

, die alle Dateien in einer einzigen Zeile druckt, durch Semikolon getrennt. Ich brauche eine Datei pro Zeile. Wie kann ich dies tun, ohne auf Betriebssystembefehle zuzugreifen oder Java-Code zu schreiben?

UPDATE:

Ah, sollte präziser gewesen - die Liste muss Verzeichnisse nicht enthalten. Ich schreibe ChssPly76 als die akzeptierte Antwort sowieso, da der pathconvert Befehl genau das war, was ich vermisste. Um die Verzeichnisse zu entfernen und nur die Dateinamen aufzulisten, habe ich "flatten" mapper verwendet. Hier

ist das Skript, das ich am Ende mit:

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

Antwort

65

Verwenden Sie die PathConvert Aufgabe:

<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

Die PathConvert Aufgabe scheint den absoluten Dateipfad zu erstellen. Gibt es eine Möglichkeit, dies zu verhindern? Ich habe das gleiche Problem und möchte eine Liste von Dateien drucken, aber nicht den vollständigen Pfad, aber einen relativen Pfad (so flatten wird nicht für mich arbeiten) – Soccertrash

+1

@Soccertrash, löste ich dies mit der Nachbearbeitung der Datei mit ' 'um das Präfix für die gemeinsame Basis zu entfernen (in meinem Fall). – mgaert

+3

@mgaert, Sie können es als ' '. Platzieren Sie es in' '. –

0

Da Ant 1.6 können Sie verwenden toString:

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