У меня есть сценарий, в котором есть «архивный» каталог, содержащий различные подкаталоги.Я только хочу сохранить последние три подкаталога.Так, например, у меня есть:
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 выбрать всено самые последние три справочника основаны на дате.