You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本使用scp批量下载多输入参数对应远程服务端文件的问题

问题根因

你之前修改失败的核心原因是$@的展开特性:$@会把所有传入参数展开为独立的空格分隔字段,假设你传入1 2,run"$@"*.lz4会被展开为run1 2*.lz4,完全不符合scp的远程路径格式要求,自然无法匹配到正确文件。

实现方案

方案1:循环逐次下载(逻辑最直观,容错率高)

每个参数单独发起一次scp请求,不需要处理复杂的路径拼接,适合参数不多的场景:

#!/bin/bash
echo Insert your username:
read user
# 遍历所有传入的编号参数
for num in "$@"
do
    scp "${user}@server:/path/run${num}*.lz4" ./
done
# 全部下载完成后统一解压并删除源压缩包
lz4 -mdv --rm run*.lz4

方案2:单次scp连接批量下载(减少连接开销)

如果需要降低ssh连接建立的开销,可以先构造完整的远程路径列表,再一次性传给scp:

#!/bin/bash
echo Insert your username:
read user
# 构造所有远程文件路径数组
remote_paths=()
for num in "$@"
do
    remote_paths+=("${user}@server:/path/run${num}*.lz4")
done
# 单次scp请求下载所有匹配文件
scp "${remote_paths[@]}" ./
lz4 -mdv --rm run*.lz4
注意事项

上述写法中通配符*被双引号包裹,不会被本地shell提前展开,会直接传给远程服务器做路径匹配,符合你的需求。如果担心当前目录存在同名文件导致本地误匹配,可以将通配符转义为\*进一步保证安全。

内容的提问来源于stack exchange,提问作者user17004502

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:09:03