2009-10-14 19 views
12

Muszę skopiować wszystkie pliki w folderze oprócz katalogu w tym folderze za pomocą skryptu Ant.Ant - tylko plik kopiowania, nie katalog

W tym celu używam poniższego skryptu.

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

Ale kopiuje wszystkie pliki i katalog w tym folderze.

jak ograniczyć/filtrować katalog w tym folderze?

dzięki,

Odpowiedz

10

Czy myśli Pan, że srcdir conatins podkatalogów, a ty nie chcesz, aby je skopiować, po prostu chcesz skopiować pliki jeden poziom poniżej srcdir?

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

To powinno zadziałać. "**/*.*" w twoim pytaniu oznacza "każdy plik w każdym podkatalogu". Po prostu użycie "*" po prostu dopasuje pliki do srcdir, a nie do podkatalogów.

Edytowane w celu wykluczenia tworzenia pustych podkatalogów.

+0

* przy sama tworzy pustych podkatalogów. Nie uważam tego za oczekiwane zachowanie. Uważam, że poniższe rozwiązanie @ Pavela jest słuszne. – Gatica

1

można spróbować

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

** służy do dopasowania struktury katalogów.

-1

Sekretem jest używanie zamiast zestawu plików zamiast dirset.

+6

Podejrzewam, że mówienie bardziej konkretnie o tym, co masz na myśli, byłoby korzystne. –

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

Nie mam wystarczającej reputacji, aby komentować, więc piszę nowy post tutaj. Oba rozwiązania obejmują w sumie name="*" lub name="*.*", ale żaden z nich nie jest dokładnie taki, jakiego można się spodziewać.

Pierwsza tworzy puste katalogi, które znajdują się w katalogu źródłowym, ponieważ * pasuje również do nazwy katalogu. *.* działa głównie dlatego, że konwencja, że ​​pliki mają rozszerzenie i katalogi nie, ale jeśli nazwiesz katalog my.dir, ten symbol wieloznaczny utworzy pusty katalog o tej samej nazwie.

Aby zrobić to poprawnie, można wykorzystać przełącznik <type /> że <fileset /> akceptuje:

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

myślę, że jest prostszy sposób.

flatten="true" - Zignoruj ​​strukturę katalogu źródłowego, skopiuj wszystkie pliki do jednego katalogu, określonego przez atrybut todir. Wartość domyślna to false.

0

Jeśli folder zawiera wiele podkatalogów i nie chcesz, żeby być kopiowane (jeśli chcesz tylko pliki) Spróbuj ..

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

Domyślnie spłaszczanie jest ustawione na "fałsz" –

Powiązane problemy