我试图编写一个脚本来清理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/125
或ls
命令。所以我尝试了dir
命令:
search
但是这递归地列出了所有文件,这不是我正在寻找的。我只需要直接子文件夹列表。我也试过
jfrog rt search my-repo/foo/*
但是这并没有返回任何结果,因为搜索命令只返回文件,而不是文件夹。
如何在Artifactory存储库中列出给定文件夹的子文件夹?
答案 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
允许匿名读取。