如何在wget批量下载时从URL的title参数设置文件名?
无需Python脚本的wget批量下载命名方案
嘿,其实不用非得写Python脚本,咱们用wget搭配常见的shell工具就能轻松实现按URL里的title参数命名下载文件,给你几个实用的方案:
方案一:Shell循环+Awk提取title
这个方法用Awk来解析URL里的title参数,逻辑简单直观:
while read -r url; do # 跳过空行 [ -z "$url" ] && continue # 提取title参数的值(处理title后还有其他参数的情况) filename=$(echo "$url" | awk -F'&title=' '{split($2, arr, "&"); print arr[1]}') # 用wget指定文件名下载 wget -O "$filename" "$url" done < a.txt
说明:
- Awk先以
&title=为分隔符拆分URL,再把第二部分用&拆分,取第一个元素就是纯净的title值,避免把后面的其他参数带进来。 - 给
filename和url加双引号,能兼容title里带空格、特殊字符的情况。
方案二:Shell循环+Sed正则提取title
如果你更熟悉正则,用Sed来捕获title参数也很方便:
while read -r url; do [ -z "$url" ] && continue # 用正则匹配捕获title参数的值 filename=$(echo "$url" | sed -E 's/.*&title=([^&]*).*/\1/') wget -O "$filename" "$url" done < a.txt
说明:
- Sed的正则
.*&title=([^&]*).*会匹配整个URL,捕获&title=后面直到下一个&(或URL结尾)的所有字符,\1就是捕获到的title值。 -E参数让Sed支持扩展正则,写法更简洁。
方案三:用xargs批量处理(进阶版)
如果想让命令更紧凑,也可以用xargs配合Awk/Sed来实现:
cat a.txt | xargs -I {} sh -c 'filename=$(echo "{}" | sed -E "s/.*&title=([^&]*).*/\1/"); wget -O "$filename" "{}"'
说明:
- xargs会把a.txt里的每个URL作为参数传递给后面的shell命令,
{}代表当前的URL。 - 这个写法适合单行快速执行,不需要写循环脚本。
这些方案都不需要额外安装Python环境,在大多数Linux/macOS系统上默认就能运行,比写Python脚本更轻量化~
内容的提问来源于stack exchange,提问作者ooo
相关产品推荐
相关产品推荐

