Cygwin下bash脚本调用yt-dlp下载DiscoveryPlus视频失败问题
修复Cygwin下yt-dlp批量下载脚本的两个错误
下面是修复后的完整脚本,同时拆解两个问题的修复逻辑:
#!/bin/bash # 读取链接文件的每一行URL while IFS= read -r url; do # 跳过空行 [[ -z "$url" ]] && continue # 修复sed表达式:用#作为分隔符,避免URL中的/干扰匹配 folder_name=$(echo "$url" | sed -E 's#.*/([^-]+)-.*#\1#') # 创建目标文件夹(不存在则自动创建) mkdir -p "$folder_name" # 修复yt-dlp参数:直接传单个URL,不用-a;指定下载路径到对应文件夹 yt-dlp --cookies cookies.txt -o "$folder_name/%(title)s.%(ext)s" "$url" done < links_da_scaricare.txt
具体修复点说明
sed表达式未终止问题修复:
原脚本里的sed命令大概率用了/作为替换分隔符,但DiscoveryPlus的URL包含大量/,会让sed误把URL里的/当成表达式结束符,触发报错。现在替换成#作为分隔符,同时调整正则为[^-]+,精准提取citta-mortale这类-前的最后一段路径作为文件夹名。yt-dlp批量参数误用修复:
-a参数是用来指定批量URL文件的(比如yt-dlp -a links_da_scaricare.txt),但脚本是遍历单个URL,用-a "$url"会让yt-dlp把这个URL当成文件名去读取,自然报错“无法读取batch文件”。现在直接把URL作为参数传入,同时用-o指定下载目录到对应文件夹,实现分类下载。
执行前给脚本加执行权限:chmod +x script.sh,然后在Cygwin里运行bash script.sh即可。
内容的提问来源于stack exchange,提问作者user3520363
相关产品推荐
相关产品推荐

