2009-09-21 1 views
42

У меня есть заполненный набор файлов, и мне нужно распечатать соответствующие имена файлов в текстовый файл.Как распечатать набор файлов в файл, по одному имени файла в строке?

Я попытался это:

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

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

который печатает все файлы на одной строке, разделенных точкой с запятой. Мне нужно иметь один файл в строке. Как я могу это сделать, не прибегая к вызовам команд ОС или написанию кода Java?

UPDATE:

Ах, должно быть более конкретным - список не должен содержать каталоги. Я все равно отмечаю ChssPly76 как принятый ответ, так как команда pathconvert была именно тем, чего мне не хватало. Чтобы разбить каталоги и перечислить только имена файлов, я использовал "flatten" mapper.

Вот скрипт, который я закончил с:

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

ответ

65

Используйте 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

Задача PathConvert кажется, создает абсолютный путь к файлу. Есть ли возможность предотвратить это? У меня такая же проблема и вы хотите распечатать список файлов, но не полный путь, а относительный путь (так что сглаживание не будет работать для меня) – Soccertrash

+1

@Soccertrash, я решил это с последующей обработкой файла с помощью <<файла замены = "$ {sounds.txt}" token = "$ {basedir} \" value = "" /> 'для удаления общего базового dir-префикса (в моем случае). – mgaert

+3

@mgaert, вы можете сделать это на месте как ' '. Поместите его в' '. –

0

Поскольку Ant 1.6 вы можете использовать toString:

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