根据工件的年龄删除指定路径下的工件中的工件

时间:2019-10-10 18:02:59

标签: artifactory artifactory-query-lang

我需要删除我的仓库中超过某个天数的仓库中的仓库版本。我的意思是,假设我的人工网址回购是:-

https://artifactory.mycompany.com/artifactory/myrepo/

,在该存储库下,只有几个名称模式为abc-*-xyz的文件夹,这意味着这些文件夹的完全限定路径为:-

https://artifactory.mycompany.com/artifactory/myrepo/abc-1-xyz
https://artifactory.mycompany.com/artifactory/myrepo/abc-2-xyz
https://artifactory.mycompany.com/artifactory/myrepo/abc-3-xyz

现在,在这些文件夹中的每一个下面都存储了我只想删除的实际版本化的工件文件夹,这意味着整个版本文件夹(例如,其中两个网址的完整文件夹)将是:-

https://artifactory.mycompany.com/artifactory/myrepo/abc-1-xyz/ver_11
https://artifactory.mycompany.com/artifactory/myrepo/abc-1-xyz/ver_12
https://artifactory.mycompany.com/artifactory/myrepo/abc-2-xyz/ver_3
https://artifactory.mycompany.com/artifactory/myrepo/abc-2-xyz/ver_5
因此,如果说这些文件夹ver_ *早于30天,我希望将其删除。而且只有这些ver_ *文件夹,而不是abc-*-xyz等,

我可以看到下面的stackoverflow问题,并且能够针对该用例进行工作,但无法为我的用例构造AQL,因此我可以相应地使用spec文件,该文件可用于删除此处需要的文件。

Artifactory delete all artifacts older than 6 months

在这里,任何帮助我构建AQL文件的帮助,以及将被称为实际删除的spec文件,将一如既往地受到赞赏。

2 个答案:

答案 0 :(得分:3)

以下文件规范满足您的需求:

{
  "files": [
    {
      "aql": {
        "items.find": {
          "repo": "myrepo",
          "path": {"$match":"abc-*-xyz"},
          "name": {"$match":"ver_*"},
          "type": "folder",
          "$or": [
            {
              "$and": [
                {
                  "created": { "$before":"7d" }
                }
              ]
            }
          ]
        }
      }
    }
  ]
}

以上文件规范会找到符合以下条件的所有文件夹:

  1. 它们在my-repo存储库下。
  2. 它们位于名称与abc-*-xyz匹配且位于存储库根目录中的文件夹中。
  3. 他们的名字匹配ver _ *
  4. 它们是在7天前创建的。

要删除此文件规范中找到的所有文件夹,请执行以下操作。

  1. 创建文件规范并根据需要命名。为了这个示例,我们将其称为 delete-folders-spec
  2. 从终端,在与 delete-folders-spec
  3. 相同的目录中,运行以下JFrog CLI命令
  

jfrog rt del --spec delete-folders-spec

答案 1 :(得分:0)

它可以通过在命令中使用 --quiet=true 来解决,因为没有它它会卡住,如下图所示:

asks explicitly for deleting the folders