2010-09-22 5 views
12

Предположим, что я создавал сценарий развертывания с использованием nant на сервере Windows для общего доступа к файлам: \\server\share. Я хочу, чтобы nant-скрипт удалял все файлы из общего ресурса, а затем копировал их в новые файлы.В nant, как удалить содержимое каталога, но не самого каталога?

У меня есть этот код для удаления файлов, но я получаю сообщение об ошибке, что он не может удалить «\ server \ share». Но я не хотел удалять эту акцию, просто содержимое в ней.

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

Выход:

 
BUILD FAILED 

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

Если я изменил его вместо удаления содержимого каталога в доле, скажем \\server\share\somedir, он будет удалять «somedir» без ошибок. Но все-таки я не хотел удалять директорию, просто содержимое. Есть ли способ?

ответ

25

Это работает для меня - нет требуются обходные пути:

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

Пробовал это, и это сработало! Забавно, я никогда не видел этого синтаксиса в nant docs. – spoulson

+4

nant docs kinda suck ... – D3vtr0n

2

Вы можете ввести тег "exclude" и исключить фиктивный файл. Это оставит корневую папку неповрежденной.

Я использую следующий:

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

Принимая кий из nsr81, я был в состоянии придумать с этим обходным путем, который работает для меня:

<touch file="${DeployTo}/deleteme" /> 
<delete> 
    <fileset basedir="${DeployTo}"> 
     <include name="**/**" /> 
     <exclude name="deleteme" /> 
    </fileset> 
</delete> 
<delete file="${DeployTo}/deleteme" /> 
Смежные вопросы