Ответ 1
Это работает для меня - никаких обходных решений не требуется:
<delete>
<fileset basedir="\\server\share">
<include name="**\*" />
</fileset>
</delete>
Предположим, что я выполнял сценарий развертывания с использованием nant на сервере Windows для совместного использования файлов: \\server\share
. Я хочу, чтобы nant script удалял все файлы из общего ресурса, а затем копировал их в новые файлы.
У меня есть этот код для удаления файлов, но я получаю сообщение об ошибке, что он не может удалить "\ 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.
Если я изменил его, чтобы вместо этого удалить содержимое каталога в share, скажем \\server\share\somedir
, он удалит "somedir" без ошибок. Но все-таки я не хотел удалять директорию, просто содержимое. Есть ли способ?
Это работает для меня - никаких обходных решений не требуется:
<delete>
<fileset basedir="\\server\share">
<include name="**\*" />
</fileset>
</delete>
Вы можете ввести тег "exclude" и исключить фиктивный файл. Это оставит корневую папку неповрежденной.
Я использую следующее:
<target name="clean">
<delete>
<fileset basedir="${DeployTo}">
<include name="**/*" />
<exclude name="**/aspnet_client/**" />
</fileset>
</delete>
</target>
Взяв cue от nsr81, я смог придумать это обходное решение, которое работает для меня:
<touch file="${DeployTo}/deleteme" />
<delete>
<fileset basedir="${DeployTo}">
<include name="**/**" />
<exclude name="deleteme" />
</fileset>
</delete>
<delete file="${DeployTo}/deleteme" />