Использование Apache Ant для удаления всех, кроме самых последних 3 каталогов - PullRequest
0 голосов
/ 19 мая 2018

У меня есть сценарий, в котором есть «архивный» каталог, содержащий различные подкаталоги.Я только хочу сохранить последние три подкаталога.Так, например, у меня есть:

archive/
  subA/    [created 1-May-2018]
  subB/    [created 2-May-2018]
  subC/    [created 3-May-2018]
  subD/    [created 4-May-2018]
  subE/    [created 5-May-2018]

Другими словами, я хочу иметь возможность выбирать subA и subB (на основе дат их файловой системы) и удалять их - включая все файлы и подкаталоги вих.Я легко могу сделать сценарий Python, который делает это, но я бы предпочел решение на основе чистого Ant.

На основе другого вопроса StackOverflow ( Как удалить все файлы, кроме последних 2, используя Ant ),Я попробовал:

<resources id="deleteDirs">
  <allbutlast count="3" >
    <sort>
      <date />
      <resources>
        <dirset dir="${dir.archive}" includes="*" />
      </resources>
    </sort>
  </allbutlast>
</resources>
<echo message="Delete directories: ${toString:deleteDirs}" />

<delete verbose="true">
  <resources refid="deleteDirs" />
</delete>

Однако этот и любые другие варианты, которые я придумал, не работают.Тем не менее, обратите внимание, что refid deleteDirs при распечатке показывает, что я хочу выбрать, но задача delete незаметно игнорирует это.

При кратком рассмотрении источника для delete *Задача 1016 *, есть комментарии о том, что delete был в какой-то момент подвергнут рефакторингу для выполнения устаревшей задачи deltree (которая, очевидно, не может быть обернута вокруг ресурса, dirset или пути).Итак, я предполагаю, что когда deltree было введено в delete , оно все еще работает только с формой:

<delete dir="DIRNAME"/>

, а не при переносе коллекции ресурсов.

Существует ли чисто Ant-способ, по сути, сделать:

<deltree dir="${dir.archive}/subA" />
<deltree dir="${dir.archive}/subB" />

Однако, без жесткого кодирования мой выбор (ы) в deltree задач и разрешение Ant выбрать всено самые последние три справочника основаны на дате.

1 Ответ

0 голосов
/ 07 июня 2019

Я застрял на той же проблеме.Я в шоке, что эта проблема не решена надолго.Видимо задача не работает с коллекцией ресурсов типа.Единственное решение проблемы, которую я мог выяснить, - это использовать ant-contrib и выполнить следующее:

    <for param="folder">
        <path>
            <allbutlast count="${to.keep.count}">
                <sort>
                    <dirset dir="${dir.archive}" includes="*"/>
                </sort>
            </allbutlast>
        </path>
        <sequential>
            <delete dir="@{folder}"/>
        </sequential>
    </for>

Если кто-то может предложить решение без использования Ant-Contrib, я буду (и я считаю, что нет).только я) очень очень благодарен.

Конечно, идеальным решением было бы сделать эту работу следующим образом:

    <delete verbose="true">
            <allbutlast count="${to.keep.count}">
                <sort>
                    <dirset dir="${dir.archive}" includes="*"/>
                </sort>
            </allbutlast>
    </delete>

, но, к сожалению, это не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...