Artifactory has a REST API and an AQL (Artifactory Query Language) that can be used to get a list of all artifacts in a repository from the command line.
In this note i will show how to list artifacts in a repository in Artifactory through the REST API using cURL
and how to get the top 10 largest artifacts in a repository.
Cool Tip: Default password and how to access REST API in Artifactory! Read more →
Artifactory API to List Artifacts in Repository
List all artifacts in a repository:
$ curl -sSf -u "<USERNAME>:<PASSWORD>" \ -H "content-type: text/plain" \ -X POST \ 'http(s)://<ARTIFACTORY_URL>/api/search/aql' \ -d 'items.find({"repo":"<REPO>"})'
This API call returns the repo
, path
, name
, type
, size
and the timestamps created
, created_by
, modified
, modified_by
, updated
of the each artifact in a repository.
In case of more complex queries to the Artifactory’s REST API it is easier to write them in a text file and pass to the curl
command with -d @fileName.aql
:
$ curl -sSf -u "<USERNAME>:<PASSWORD>" \ -H "content-type: text/plain" \ -X POST \ 'http(s)://<ARTIFACTORY_URL>/api/search/aql' \ -d @fileName.aql
The contents of the fileName.aql
:
items.find({ "repo":"<REPO>" })
List artifacts in the Artifactory repositories starting with web-*
:
items.find({ "repo":{"$match":"web-*"}" })
List artifacts in the Artifactory repositories starting with web-*
or db-*
:
items.find({ "$or":[{ "repo":{"$match":"web-*"}, "repo":{"$match":"db-*"}" }] })
Display the name
, repo
, path
and size
of the top 10 largest artifacts in a repository:
items.find({ "repo":"<REPO>" }).include("name","repo","path","size") .sort({"$desc": ["size"]}) .limit(10)
Cool Tip: List repositories in Artifactory using cURL
! Read more →
There is a syntax error in this aql file:
items.find({
“repo”:{“$match”:”web-*”}”
})
Should be:
items.find({
“repo”:{“$match”:”web-*”}
})
Thanks
I was wondering how would one get only certain files in a given path.
For example my.downloads/0.0.4 in the packages repo?
{
“repo” : “packages”,
“path” : “my.downloads/0.0.4”,
“name” : “mc”,
“type” : “file”,
“size” : 23490560,
“created” : “2022-05-19T11:08:39.816+02:00”,
“created_by” : “somebody”,
“modified” : “2022-05-19T11:08:39.515+02:00”,
“modified_by” : “somebody”,
“updated” : “2022-05-19T11:08:39.819+02:00”
}
I worked it out :
items.find({“repo”:”%s”},{“path”:{“$match”:”%s/%s*”}})