You need to enable JavaScript to run this app. 使用aria2c批量下载时如何让输出文件名与输入URL保持一致
优惠活动
大模型
产品
解决方案
定价
更多

使用aria2c批量下载时如何让输出文件名与输入URL保持一致

解决方案

方案1:预处理URL列表(推荐,无需额外钩子配置)

-o 是全局参数,批量下载时所有任务会复用同一个文件名规则,因此无法生效。aria2c 支持给 -i 参数对应的下载列表单独配置单任务参数,每行URL后添加 out=自定义文件名 即可单独指定每个任务的保存名称,完全匹配需求。
首先写个简单脚本预处理原始URL列表:

#!/bin/bash
# 替换URL内的非法文件名字符为下划线,生成带out参数的下载列表
while read -r url; do
    safe_filename=$(echo "$url" | sed 's/[\/:?&=]/_/g')
    echo "$url out=$safe_filename"
done < 你的原始URL列表文件.txt > 处理后的下载列表.txt

完成后直接用处理后的列表启动下载即可:

aria2c -i 处理后的下载列表.txt --optimize-concurrent-downloads true

方案2:使用--on-download-complete事件钩子实现自动重命名

如果不想提前处理下载列表,可以通过钩子脚本动态获取下载URL并重命名文件,需要同时开启aria2的RPC接口用于查询任务信息。

  1. 新建重命名脚本aria2_rename.sh,内容如下:
#!/bin/bash
# aria2传入的固定参数:$1=任务GID $2=任务包含的文件数 $3=首个文件的本地路径
RPC_SECRET="自定义的RPC密钥"
RPC_ADDR="http://127.0.0.1:6800/jsonrpc"

# 仅处理单文件任务,多文件/BT任务直接跳过
[ "$2" -ne 1 ] && exit 0

# 调用RPC接口获取对应任务的原始下载URL
resp=$(curl -s "$RPC_ADDR" -d '{"jsonrpc":"2.0","method":"aria2.getFiles","id":"rename","params":["token:'${RPC_SECRET}'","'${1}'"]}')
raw_url=$(echo "$resp" | grep -o '"uri":"[^"]*"' | head -n 1 | cut -d'"' -f4)

# 生成合法文件名并重命名
safe_filename=$(echo "$raw_url" | sed 's/[\/:?&=]/_/g')
file_dir=$(dirname "$3")
mv -f "$3" "${file_dir}/${safe_filename}"
  1. 给脚本添加执行权限:
    chmod +x aria2_rename.sh
  2. 启动aria2时开启RPC并绑定钩子即可:
aria2c -i <urls> --optimize-concurrent-downloads true \
  --enable-rpc --rpc-secret=自定义的RPC密钥 \
  --on-download-complete ./aria2_rename.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 06:36:04