2011-06-21 12 views
6

Chciałbym skopiować pliki i podkatalogi używając Ant z jednego podkatalogu bez kopiowania reszty struktury katalogów i zawartości. Na przykład chciałbym skopiować dir_3, jego pliki (file_1 do file_n) i podkatalogi (dir_4 i dir_5), ale nie dir_1 ani dir_2. Czy istnieje wzór, który mogę użyć, aby to zrobić?Ant - kopiowanie plików i podkatalogów z jednego podkatalogu na drzewie

temp 
    \--dir_1 
    \--dir_2 
     | 
     \--dir_3 
      | 
      \--dir_4 
      \--dir_5 
      \-- file_1 
      | 
      \--file_n 

Dzięki.

Odpowiedz

16

To nie jest takie trudne ...

<copy todir="${copy.dir}"> 
    <fileset dir="temp"> 
     <include name="**/dir3/**"/> 
    </fileset> 
</copy> 

Podczas korzystania z dyrektywy include będzie zawierał tylko pliki pasujące do wzorca, który użytkownik poda. W tym przypadku kopiuję tylko te pliki, które mają /dir3/ gdzieś w pełnej nazwie ścieżki. Obejmuje to podkatalogi pod numerem dir3 i wszystkie pliki pod numerem dir3.

Można użyć dyrektywy exclude przesłonić dyrektyw include:

<copy todir="${copy.dir}"> 
    <fileset dir="temp"> 
     <include name="**/dir3/**"/> 
     <exclude name="**/dir3/*"/> 
    </fileset> 
</copy> 

Spowoduje to skopiowanie wszystkich podkatalogów i plików w tych katalogach podrzędnych, ale nie pliki pod samą dir3. * dopasowuje wszystkie pliki w katalogu, podczas gdy ** dopasowuje wszystkie pliki w całym drzewie katalogów.

Zauważ, że utworzy to katalog temp/dir2/dir3. Jeśli chcę temp/dir3, muszę ustawić mój zestaw plików do katalogu nadrzędnego dir3:

<copy todir="${copy.dir}"> 
    <fileset dir="temp/dir2"> 
     <include name="dir3/**"/> 
    </fileset> 
</copy> 

ten sposób:

<copy todir="${copy.dir}"> 
    <fileset dir="temp/dir2/dir3"/> 
</copy> 

stworzy katalog temp ze wszystkich plików bezpośrednio pod dir3 bezpośrednio pod temp . Będzie również katalog temp/dir4 i temp/dir5 zawierający wszystkie pliki (i drzewa katalogów) w tych katalogach.

1
<copy todir="/some/path/foobar" verbose="true"> 
    <fileset dir="/some/path/temp/dir2" includes="**"/> 
</copy> 

wystarczy użyć zestawu plików zaczynając od dir2 tym wszystkich katalogów i plików poniżej ..
gadatliwy = true, aby powtórzyć wszystkie pliki skopiowane
może być trzeba użyć nadpisania = true również wtedy, gdy reż czyli określony przez todir
atrybut już istnieje, w przeciwnym razie istniejące pliki nie zostaną nadpisane przez zadania kopiowania

Powiązane problemy