artifactory 上传下载命令
- 下载单个文件到本地:
# 下载远程a.txt 到本地a.txt
jf rt dl "aa/bb/a.txt" "a.txt" --url="$ARTIFACTORY_URL_SWF" --user="小绿" --password="$API_KEY_SWF" --flat=true # 单个文件上传下载命令:
jf rt dl "要下载的远程文件名称" "下载到本地的名称" --url="artifactory_url" --user="username" --password="api_token" --flat=true
例如:jf rt dl "apricot_rse/i3_RSU/RSE_System_Staging_Build/20250513/E228.0/System_411487/deliverables/STAR3.0/fastboot_build/dev/fastboot_android_qnx_all_images_userdebug_dev_20250513_411487.tar.gz" "fastboot_android_qnx_all_images_userdebug_dev_20250513_411487.tar.gz" --ur
l="https://artifact.abc:443/artifactory/" --user="GAYUXIA" --password="aaaaaaaaaaaaaaaaaaaa" --flat=true- 批量下载文件到本地:
#下载远程aa/dev 到本地的AA/DEV 目录下
#ARTIFACTORY_URL_SWF="https://abc.def.com/artifactory/"
# --falst=true 如果是 true,则所有文件会扁平化下载到同一个目录中。
#扁平化下载:所有文件都下载到一个目录下,包括子目录的文件也下载到同一个目录,没有目录层级
jf rt dl "aa/dev/" "AA/DEV/" --url="$ARTIFACTORY_URL_SWF" --user="GAYUXIA" --password="$API_KEY_SWF" --flat=true- 上传单个文件到指定目录:
# --recursive=true:从源目录递归上传文件。
# --flat=true 将文件上传到指定的确切目标路径,但不保留源目录结构。
# 这里的artifactory_url 必需写到:https://www.abc.com/artifactory/ 这里
jf rt u --fail-no-op --recursive=true --flat=true --url $artifactory_url $file $upload_dir --user=$username --password=$api_key 例如:
jf rt u --fail-no-op --recursive=true --flat=true --url https://www.abc.com/artifactory/ a.txt A/B/C/a.txt --user=$username --password=$api_key- 查询指定目录下的文件列表:
jf rt search --access-token="你的API TOKEN" --url=https://artifact.XXX.com/artifactory/ apricot_rse/i3_RSU/VCPU/8295_master/STAR3.5/E230.0-1686/dev/ --count=false --include-dirs=false
- 查询artifactory指定目录的所有文件夹,文件,以及文件的大小
- (1):定义一个search-spec.json文件,文件内容如下:
{
"files": [
{
"pattern": "apricot_rse/i3_RSU/RSE_System_Staging_Build/*/*",
"recursive": "true",
"includeDirs": "false",
"sortBy": [
"created"
],
"sortOrder": "asc"
}
]
}(2):查询命令:
cmd = [
"jf", "rt", "search",
"--spec=search-spec.json",
"--server-id=artifactory"
] # --server-id=artifactory 这里的参数需要使用jf c add 预先配置,artifactory_url地址,artifactory_username,artifactory_password#完整脚本代码如下:
import subprocess
import json
import pandas as pd
from datetime import datetime
import re
from pathlib import Path
import os def create_spec_file():
spec = {
"files": [
{
"pattern": "apricot_rse/i3_RSU/RSE_System_Staging_Build/*/*",
"recursive": "true",
"includeDirs": "false",
"sortBy": ["created"],
"sortOrder": "asc"
}
]
}
with open("search-spec.json", "w") as f:
json.dump(spec, f, indent=2)
print("创建 search-spec.json") def run_jfrog_search():
cmd = [
"jf", "rt", "search",
"--spec=search-spec.json",
"--server-id=artifactory"
] try:
result = subprocess.run(
cmd,
check=True,
capture_output=True,
text=True
)
with open("result.json", "w") as f:
f.write(result.stdout)
print("结果已保存到 result.json")
return True
except subprocess.CalledProcessError as e:
print(f"执行失败:\n{e.stderr}")
return False def get_data(filename="result.json"):
prefix = "apricot_rse/i3_RSU/RSE_System_Staging_Build/"
cutoff_date = datetime.strptime("2025-04-18", "%Y-%m-%d") with open(filename, 'r', encoding='utf-8') as f:
data = json.load(f) filtered_data = []
for item in data:
created_str = item.get("created", "")[:10] # 只取日期部分
try:
created_date = datetime.strptime(created_str, "%Y-%m-%d")
except ValueError:
# 无效日期格式跳过这条
continue if created_date >= cutoff_date:
path = item.get("path", "")
if path.startswith(prefix):
path = path[len(prefix):]
#if (path.endswith(('.tar', '.tar.gz')):
#if (path.endswith(('.tar', '.tar.gz')) and 'dev' in path):
#if path.endswith(('.tar', '.tar.gz')) and 'dev' in path and any(keyword in path for keyword in ['android_fastboot', 'flat_build', 'BOOT']):
#pattern = r'.*(android_fastboot|flat_build|BOOT).*dev.*\.tar(\.gz)?$'
#if re.search(pattern, path, re.IGNORECASE):
if (
#path.endswith(('.tar', '.tar.gz')) and
path.endswith(('.tar.gz')) and
(
# 匹配 swup/dev/*/*/BOOT/
('swup/dev' in path and '/BOOT/' in path and 'BOOT_ALWAYS_ON' not in path) or
# 匹配 flat_build/dev/
('flat_build/dev' in path) or
# 匹配 fastboot_build/dev/
#('fastboot_build/dev/' in path) or
('android/dev/' in path)
)
):
path_obj = Path(path)
size_bytes = item.get("size")
size_gb = round(size_bytes / (1024**3), 2) if size_bytes is not None else None package_name = os.path.basename(path)
parts = path.split('/')
version = parts[1] if len(parts) > 1 else ""
#if not package_name.startswith(("symbols_vmlinux")):
if not package_name.startswith(("symbols_vmlinux",)) and "userdebug" not in package_name:
filtered_data.append({
"created": created_str,
"version": version,
"path": path,
"package_name" : package_name,
"size": size_gb
}) df = pd.DataFrame(filtered_data)
df.to_excel('output.xlsx', index=False) if __name__ == "__main__":
create_spec_file()
run_jfrog_search()
get_data(filename="result.json")
artifactory 上传下载命令的更多相关文章
- Linux系统简单易用的上传下载命令rz和sz
一)安装方法汇总 1.安装方法(推荐) yum install lrzsz -y 2.在安装Linux系统时选中"DialupNetworking Support"组包 3.安装系 ...
- Linux系统上传下载命令rz和sz
Linux系统简单易用的上传下载命令rz和sz (2017年7月10日更新) 发布地址(http://oldboy.blog.51cto.com/2561410/588592) (一)安装方法汇总 1 ...
- linux系统上传下载命令rz和sz的教程
(一)安装方法汇总(注意:一下命令如果没有权限的需要在每个命令前面加一个sudo) 1.安装方法(推荐) sudo yum install lrzsz 2.在安装Linux系统时选中“DialupNe ...
- Linux shell:FTP(文件传输协议)上传下载命令
SecureCRT通过ftp将nmon上传,建立一个目录,用命令上传文件.[命令见下面] 或通过UE.SSH上传/下载,使用sftp建立链接. [通过cmd进入ftp服务器]先假设有一FTP服务器,F ...
- Linux 下上传下载命令,SCP,SFTP,FTP
scp 帮助命令: man scp scp功能: 下载远程文件或者目录到本地, 如果想上传或者想下载目录,最好的办法是采用tar压缩一下,是最明智的选择. 从远程主机 下载东西到 本地电脑 拷贝文件命 ...
- Xshell 5 配置上传下载命令
可以在官网https://www.netsarang.com/products/main.html 下载Xshell, 目前最新的版本已经到Xshell 6了 本人记录下安装的目录截图: 安装命令: ...
- xshell5 上传下载命令
借助XShell,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. yum -y install lrzsz 其中,对于sz和rz的理解与记忆我用 ...
- ftp文件上传下载命令
介绍:从本地以用户wasqry登录的机器1*.1**.21.67上通过ftp远程登录到ftp服务器上,登录用户名是lte****,以下为使用该连接做的实验. 查看远程ftp服务器上用户lte**** ...
- sftp 上传下载 命令介绍
sftp是Secure FileTransferProtocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法. sftp与 ftp有着几乎一样的语法和功能.SFTP为 SSH的一部分 ...
- XShell上传下载命令
参考:https://www.centos.bz/2012/12/xshell-securecrtrz-sz-upload-download/ 上传文件时,执行rz就会弹出文件选择对话框来选择文件.下 ...
随机推荐
- SQL 日常练习 (二十)
也只是尽快搬完这快一个月 sql 的砖, 准备要来整新学习模块了, 因此, 正好趁着五一, 加波速. 也会一直坚守和追求, 学无止境, 气有浩然. 每次都会说, 这是一种精神的传承,而我想的是, 不仅 ...
- vue3适配移动端的登录实现
<script lang="ts" setup> import { ref } from 'vue' const PHONE_NUMBER_REGEX = /^1[0- ...
- DNSPY调试引用dll
(1) 点击"调试",选择需要调试的可执行程序 (2) 点击"确定"后,打开程序,再点击"调试"-"窗口"-模块 (3) ...
- JAVA基础-跳出循环的4种方式
摘要:介绍4种跳出循环的方式,尤其是其中的break 标签,有时候真的会成为工作中的秘密武器. 在实际编程中,有时需要在条件语句匹配的时候跳出循环.在 Java 语言里,由关键词 break 和 ...
- iStore实现 SmartDNS + AdGuard Home IP优选+广告屏蔽
iStore实现 SmartDNS + AdGuard Home IP优选+广告屏蔽 参考自openwrt 官方版 安装配置 AdGuard Home + smartdns 告别广告烦扰 教程 软路由 ...
- kubernetes部署kafka集群
一.kafka介绍 kafka是一个分布式.多副本.多订阅者.分区的,基于zoopkeeper协调的分布式日志系统.其主要特点为: 1.以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上 ...
- Spring的DI依赖注入
xml中依赖注入bean bean标签下 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE b ...
- Mysql建表注意点
库名.表名.字段名必须使用小写字母,"_"分割.
- 开源交流丨一站式大数据平台运维管家ChengYing安装原理剖析
课件获取:关注公众号"数栈研习社",后台私信 "ChengYing" 获得直播课件 视频回放:点击这里 ChengYing开源项目地址:github 丨 git ...
- 阿里P7,竟问这么简单的题目?
今天面试阿里后端开发, ● 面试官提问:谈谈你对 const 理解 ● 我这样回答的: const 仅仅表示变量不能修改,太简答了,我早就知道了. ● 面试官回复:你觉得 这样能面过 P7 ,百万年薪 ...