2009-10-14 10 views
12

Antスクリプトを使用して、そのフォルダ内のディレクトリ以外のフォルダ内のすべてのファイルをコピーする必要があります。Antコピー専用ファイルではないディレクトリ

私はそれを行うために以下のスクリプトを使用しています。

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="**/*.*"/> 
    </fileset> 
</copy> 

ただし、そのフォルダ内のすべてのファイルとディレクトリがコピーされます。

そのフォルダ内のディレクトリを制限/フィルタする方法はありますか?

おかげで、

答えて

10

はあなたが意味するかsrcdir conatinsサブディレクトリ、そしてあなたそれあなたがちょうどsrcdirの下のファイルを1つのレベルをコピーしたい、それらをコピーしたくありませんか?

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    <type type="file"/> 
    </fileset> 
</copy> 

これでうまくいくはずです。あなたの質問の "**/*.*"は、 "すべてのサブディレクトリの下のすべてのファイル"を意味します。単に "*"を使用すると、サブディレクトリではなくsrcdirのファイルと一致します。

空のサブディレクトリの作成を除外するように編集しました。

+0

*自体によって、空のサブディレクトリを作成します。私はそれが期待される行動であるとは考えていません。私は以下のパベルのソリューションを正しいものと考えています。 – Gatica

1

あなたは**

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*.*"/> 
    </fileset> 
</copy> 

を試すことができますが、ディレクトリ構造を一致させるために使用されます。

-1

秘密はfilesetではなくdirsetを使用することです。

+6

私はあなたがここで有益であることをより明確にすると思われます –

1
<copy todir="targetsir" includeEmptyDirs="false"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    </fileset> 
</copy> 
7

コメントするには十分な評判がないので、私はここに新しい投稿を書いています。 name="*"またはname="*.*"を含む両方のソリューションは一般的にうまく動作しますが、まったく期待通りのものはありません。

*もディレクトリ名と一致しているため、最初はソースディレクトリに存在する空のディレクトリを作成します。 *.*はファイルが拡張子とディレクトリを持たないという慣習のために動作しますが、ディレクトリ名をmy.dirとすれば、このワイルドカードはこの名前の空のディレクトリも作成します。

<fileset />が受け入れるあなたは <type />セレクタを活用することができ、それを正しく行うには:

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    <type type="file"/> 
    </fileset> 
</copy> 
22

は、私はもっと簡単な方法があると思います。

flatten="true" - ソースディレクトリのディレクトリ構造を無視して、すべてのファイルをtodir属性で指定された単一のディレクトリにコピーします。デフォルトはfalseです。

0

フォルダは、多くのサブディレクトリがあり、(あなたがファイルのみをしたい場合)あなたはこれを試して、それらをコピーしたくない場合は...

<target name="copy"> 
<copy todir="out" flatten="true"> 
<fileset dir="tn"> 
<filename name="**/cit.txt" /> 
</fileset> 
</copy> 
</target> 
+0

デフォルトでは、flattenは "false"に設定されています –

関連する問題