如何仅使用curl在Artifactory Repo子文件夹中搜索

hvvq6cgz  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(129)

因此,我以前有一个脚本,在我的Artifactory存储库中搜索某个属性的文件夹。

curl -i -X GET "${ARTIFACTORY_URI}/api/search/prop?my-prop=aaa&repos=my-repo

到目前为止一切顺利。我部署工件的方法是将它们放置在子文件夹中,每个子文件夹都被分配了属性my-prop。然后,当我运行此命令时,我得到了一个满足搜索条件的子文件夹列表。这很有效,因为这些子文件夹都直接位于存储库my-repo中。
但是现在我们不得不对Artifactory进行一些重组。现在我试图列出的子文件夹位于repo中的子文件夹内的子文件夹中。我的命令仍然有效,但它返回了所有的子文件夹。
例如,请考虑以下内容:

my-repo:
   * folder1
      + folder1-1
         - folder1-1-1 (my-prop=aaa)
         - folder1-1-2 (my-prop=bbb)
      + folder1-2
         - folder1-2-1 (my-prop=aaa)
   * folder2
      + folder2-1
         - folder2-1-1 (my-prop=aaa)

因此,当使用相同的命令搜索my-prop=aaa时,我现在得到的是folder 1 -1-1、folder 1 -2-1和folder 2 -1-1。但我想做的是将搜索限制在子子文件夹folder 1 -1。我试图简单地将路径添加到repos参数中,但它不起作用。

curl -i -X GET "${ARTIFACTORY_URI}/api/search/prop?my-prop=aaa&repos=my-repo/folder1/folder1-1

所以我的问题是如何做到这一点?Artifactory网站是一个火车残骸,当然不是很有帮助。是否有一个额外的文件夹/路径参数,我可以使用?我想指出的是,我正在一个令人难以置信的限制客户系统上工作,并没有访问JFrog CLI工具,所以我必须使用curl和wget做一切。

fnx2tebb

fnx2tebb1#

您应该能够使用AQL(Artifactory Query Language,工件查询语言)来实现这一点。
对于您的示例,请使用以下内容:

curl -X POST "${ARTIFACTORY_URI}/api/search/aql" \
     -H 'Content-Type: text/plain' \
     --data 'items.find({"repo":"my-repo","@my-prop":"aaa","path":"folder1","type":"folder"})'

这将在my-repo中搜索具有给定属性的 folders,并位于folder1的精确路径下。如果路径应该是模式而不是精确匹配,则可以使用其他运算符,如$match
有关完整的AQL语法和准则,请参见:Artifactory Query Language

相关问题