2009-09-21 23 views
42

私は人口の多いファイルセットを持っているので、一致するファイル名をテキストファイルに出力する必要があります。ファイルセットを1行に1ファイルずつファイルに印刷するにはどうすればよいですか?

私はこれを試してみました:

セミコロンで区切られた単一のライン、上のすべてのファイルを印刷し
<fileset id="myfileset" dir="../sounds"> 
    <include name="*.wav" /> 
    <include name="*.ogg" /> 
</fileset> 

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

。 1行に1ファイル必要です。 OSコマンドの呼び出しやJavaコードの記述に頼らずに、どうすればいいですか?

UPDATE

ああは、より具体的なされている必要があります - リストは、ディレクトリを含めることはできません。私はpathconvertコマンドが正確に私が行方不明だったので、とにかく受け入れられた答えとしてChssPly76をマークしています。ディレクトリを削除してファイル名のみを表示するには、"flatten" mapperを使用しました。あなたがtoStringを使用することができたAnt 1.6ので

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

答えて

65

PathConvertタスクを使用します。ここでは

は私がなってしまったスクリプトがある

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

Pathconvertタスク絶対ファイルパスを作成するようです。これを防ぐ可能性はありますか?私は同じ問題がありますが、完全なパスではなく相対パスをプリントしたいのですが – Soccertrash

+1

@Soccertrash、私は '<ファイルを置き換えてファイルを後処理することでこれを解決しました= "$ {sounds.txt}" token = "$ {basedir} \" value = "" /> '(私の場合は)共通のベースディレクトリ接頭辞を削除します。 – mgaert

+3

@mgaertのように、 ' 'のようにインプレースで行うことができます。' –

0

<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> 
関連する問題