如何在Artifactory中列出子文件夹

时间:2018-02-12 17:26:22

标签: artifactory

我试图编写一个脚本来清理Artifactory中我的通用文件存储库中的旧版本。我想第一步是查看存储库并检查那里的构建。

每个版本都显示为$(document).on('click', 'image-class/id', (e) => { e.preventDefault(); let target = $(this).parent().attr('href'); router.navigate(target); }); 的子文件夹,例如我有/foo/foo/123/foo/124 /等文件夹。

似乎没有/foo/125ls命令。所以我尝试了dir命令:

search

但是这递归地列出了所有文件,这不是我正在寻找的。我只需要直接子文件夹列表。我也试过

jfrog rt search my-repo/foo/*

但是这并没有返回任何结果,因为搜索命令只返回文件,而不是文件夹。

如何在Artifactory存储库中列出给定文件夹的子文件夹?

3 个答案:

答案 0 :(得分:4)

您应该在这里查看AQL(Artifactry Query Langage):https://www.jfrog.com/confluence/display/RTF/Artifactory+Query+Language

作为示例,以下AQL将检索位于" my-repo"中的所有文件夹。在" foo"文件夹,将显示按文件夹名称排序的结果:

items.find(
    {
        "type":"folder",
        "repo":{"$eq":"my-repo"},
            "path":{"$eq":"foo"}
    }
)
.include("name")
.sort({"$desc":["name"]})

对于清理,您还可以查看以下示例,该示例列出了一个多月前创建并且从未下载过的10个较大的工件:

items.find(
    {
        "type":"file",
        "repo":{"$eq":"my-repo"},
        "created":{"$before":"1mo"},
        "stat.downloads":{"$eq":null}
    }
)
.include("size","name")
.sort({"$desc":["size"]})
.limit(10) 

答案 1 :(得分:2)

基于jroquelaure的回答,我最终得到了以下内容。仍然缺少的关键是你必须转换" items.find"将它放入filespec时调用JSON。 filespec documentation中有一个例子,我最初错过了。

我把这个JSON放在test.aql文件中:

{
  "files": 
    [
      {
        "aql": 
          {
            "items.find" : 
               {
                 "type":"folder",
                 "repo":{"$eq":"my-repo"},
                 "path":{"$eq":"foo"}
               }
          }
      }
    ]
}

然后我致电jfrog rt search --spec=test.aql

答案 2 :(得分:0)

还有一种使用curl和jq的方法

curl -s http://myatifactory.domain:4567/artifactory/api/storage/myRepo/myFolder | jq -r '.children[] |select(.folder==true) |.uri'

说明:Curl用于get the folder info,并通过管道传输到JQ,然后显示uri数组的所有children键,其中{{ 1}}键的值为folder

只是为了更容易理解-curl获取的json看起来像这样(来自人工文档的示例)

true

,因此命令的输出为{ "uri": "http://localhost:8081/artifactory/api/storage/libs-release-local/org/acme", "repo": "libs-release-local", "path": "/org/acme", "created": ISO8601 (yyyy-MM-dd'T'HH:mm:ss.SSSZ), "createdBy": "userY", "lastModified": ISO8601 (yyyy-MM-dd'T'HH:mm:ss.SSSZ), "modifiedBy": "userX", "lastUpdated": ISO8601 (yyyy-MM-dd'T'HH:mm:ss.SSSZ), "children": [ { "uri" : "/child1", "folder" : "true" },{ "uri" : "/child2", "folder" : "false" } ] }

当然,这里假设人工仓库/child1允许匿名读取。