2010-09-22 17 views
12

Giả sử tôi đang viết kịch bản triển khai bằng cách sử dụng nant trên máy chủ Windows để chia sẻ tệp: \\server\share. Tôi muốn một tập lệnh nant để xóa tất cả các tập tin từ chia sẻ sau đó sao chép trong các tập tin mới.Trong nant, làm thế nào để xóa nội dung của một thư mục, nhưng không phải là thư mục chính nó?

Tôi có mã này để xóa các tệp nhưng tôi gặp phải lỗi không thể xóa "\ server \ share". Nhưng tôi không muốn xóa phần chia sẻ, chỉ là nội dung trong đó.

<delete> 
    <fileset basedir="\\server\share"> 
     <include name="**/**" /> 
    </fileset> 
</delete> 

Output:

 
BUILD FAILED 

D:\code\xxx\xxx.deploy(177,8): 
Cannot delete directory '\\server\share'. 
    Access to the path '\\server\share' is denied. 

Nếu tôi sửa đổi nó để thay vào đó xóa nội dung của một thư mục trong cổ phiếu, nói \\server\share\somedir, nó sẽ xóa "somedir" mà không có lỗi. Nhưng tôi vẫn không muốn xóa thư mục, chỉ là nội dung. Là có một cách?

Trả lời

25

này làm việc cho tôi - không yêu cầu giải pháp:

<delete> 
    <fileset basedir="\\server\share"> 
     <include name="**\*" /> 
    </fileset> 
</delete> 
+1

Đã cố gắng điều này và hoạt động! Hài hước, tôi chưa bao giờ thấy cú pháp này trong tài liệu nant. – spoulson

+4

nant docs kinda suck ... – D3vtr0n

2

Bạn có thể giới thiệu thẻ "loại trừ" và loại trừ tệp giả. Điều đó sẽ để nguyên thư mục gốc.

Tôi đang sử dụng như sau:

<target name="clean"> 
    <delete> 
     <fileset basedir="${DeployTo}"> 
     <include name="**/*" /> 
     <exclude name="**/aspnet_client/**" /> 
     </fileset> 
    </delete> 
    </target> 
0

Nhận được tín hiệu từ nsr81, tôi đã có thể đưa ra cách giải quyết này mà làm việc cho tôi:

<touch file="${DeployTo}/deleteme" /> 
<delete> 
    <fileset basedir="${DeployTo}"> 
     <include name="**/**" /> 
     <exclude name="deleteme" /> 
    </fileset> 
</delete> 
<delete file="${DeployTo}/deleteme" />