Подтвердить что ты не робот

В nant, как удалить содержимое каталога, но не самого каталога?

Предположим, что я выполнял сценарий развертывания с использованием 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" без ошибок. Но все-таки я не хотел удалять директорию, просто содержимое. Есть ли способ?

4b9b3361

Ответ 1

Это работает для меня - никаких обходных решений не требуется:

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

Ответ 2

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

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

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

Ответ 3

Взяв cue от nsr81, я смог придумать это обходное решение, которое работает для меня:

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