2011-06-21 82 views
6

Tôi muốn sao chép tệp và thư mục con bằng cách sử dụng Ant từ thư mục con duy nhất mà không sao chép phần còn lại của cấu trúc thư mục và nội dung. Ví dụ: tôi muốn sao chép dir_3, các tệp của nó (tệp_1 thành tệp_n) và các thư mục con (dir_4 và dir_5), chứ không phải dir_1 hoặc dir_2. Có một mô hình mà tôi có thể sử dụng để làm điều này?Ant - sao chép tệp và thư mục con từ chỉ một thư mục con trên cây

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

Cảm ơn.

Trả lời

16

Nó không phải là khó khăn ...

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

Khi bạn sử dụng chỉ thị include, nó sẽ chỉ bao gồm các tệp khớp với mẫu bạn cung cấp. Trong trường hợp này, tôi chỉ sao chép những tệp có /dir3/ ở đâu đó trong tên đường dẫn đầy đủ của chúng. Điều này bao gồm các thư mục con dưới dir3 và tất cả các tệp dưới dir3.

Bạn có thể sử dụng các chỉ thị exclude để ghi đè lên include directives:

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

này sẽ sao chép tất cả các thư mục con và các tập tin trong các thư mục phụ, nhưng không phải là file dưới dir3 riêng của mình. * khớp với tất cả các tệp trong thư mục trong khi ** khớp với tất cả các tệp trong toàn bộ cây thư mục.

Lưu ý điều này sẽ tạo một thư mục temp/dir2/dir3. Nếu tôi muốn temp/dir3, tôi phải thiết fileset của tôi vào thư mục cha của dir3:

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

Việc làm này:

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

sẽ tạo ra một thư mục temp với tất cả các file trực thuộc dir3 trực thuộc temp . Cũng sẽ có một thư mục temp/dir4temp/dir5 chứa tất cả các tệp (và cây thư mục) trong các thư mục đó.

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

chỉ cần sử dụng một fileset bắt đầu từ dir2 bao gồm tất cả dirs và các tập tin dưới đây ..
verbose = true để echo tất cả các tập tin sao chép
Có thể bạn cần phải sử dụng ghi đè = true cũng nếu dir đó là theo quy định của todir
thuộc tính đã tồn tại, nếu không file hiện tại sẽ không được ghi đè bởi nhiệm vụ sao chép

Các vấn đề liên quan