如何使用scp_download基于匹配规则批量下载Tectia服务器的文件
报错的核心原因:ssh包的scp_download函数的通配符遵循POSIX Shell Glob匹配规则,不支持正则语法,你之前使用的\d、.*、{3}这类正则表达式写法无法被SCP识别,因此会触发找不到文件的报错。
可行方案
方案1:使用符合Glob规则的模式匹配批量下载
仅使用SCP支持的通配符编写匹配规则:
*:匹配任意长度的任意字符?:匹配单个任意字符[0-9]:匹配单个0-9范围内的数字
对应你的路径规则的写法如下:
# glob参数需设置为TRUE开启通配符匹配(部分版本默认开启,显式声明兼容性更好) scp_download( session, "/directory/subfolder/A[0-9][0-9][0-9]/abcde[0-9][0-9][0-9].csv", to = tempdir(), glob = TRUE )
注意:该方案无法保证文件夹后缀数字和文件名后缀数字完全同步,可能匹配到
/A001/abcde002.csv这类错位文件,对匹配精度要求高的场景推荐用方案2。
方案2:生成预定义路径字符串批量下载
因为你的路径规则完全可预测,直接生成所有符合要求的路径列表传入下载即可,不存在匹配兼容问题,且能严格保证数字同步:
# 配置需要下载的数字范围 start <- 1 end <- 200 # 替换为你实际需要的最大数字 # 批量生成所有路径 target_files <- sapply(start:end, function(num) { num_str <- sprintf("%03d", num) # 生成三位补零的数字字符串 sprintf("/directory/subfolder/A%s/abcde%s.csv", num_str, num_str) }) # 执行批量下载 scp_download(session, target_files, to = tempdir())
内容的提问来源于stack exchange,提问作者DadVlad
相关产品推荐
相关产品推荐

