使用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接口用于查询任务信息。
- 新建重命名脚本
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}"
- 给脚本添加执行权限:
chmod +x aria2_rename.sh - 启动aria2时开启RPC并绑定钩子即可:
aria2c -i <urls> --optimize-concurrent-downloads true \ --enable-rpc --rpc-secret=自定义的RPC密钥 \ --on-download-complete ./aria2_rename.sh
内容的提问来源于stack exchange,提问作者T145
相关产品推荐
相关产品推荐

