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

yt-dlp结合bash脚本按URL提取文件夹名分类下载异常求助

问题分析与解决方案

我帮你拆解下核心问题,然后一步步解决这个文件夹提取错误的问题:

核心问题根源

  1. 你误解了yt-dlp --exec参数的{}含义:默认情况下{}代表的是下载完成后的文件路径,不是你批量文件里的原始视频URL!所以你的脚本里用$1获取的是文件路径,不是目标URL,自然提取不出正确的文件夹名。
  2. -o参数的%(playlist)s导致提前生成NA文件夹:因为你的URL是单个视频,不是播放列表,yt-dlp会用NA代替不存在的播放列表名,提前创建了NA文件夹。
  3. 参数传递错误:你后来尝试传递$file_path,但这个变量在yt-dlp的命令环境中根本没有定义,传递的是空值,导致后续移动操作出错。

步骤1:修正提取文件夹的脚本

修改你的script.sh,让它正确接收原始URL和下载后的文件路径:

#!/bin/bash

# 接收两个参数:$1=原始视频URL,$2=下载完成的文件路径
original_url="$1"
downloaded_file="$2"

# 从URL中提取目标文件夹名:对应URL的第6个/分割段
folder_name=$(echo "$original_url" | cut -d "/" -f6)

# 检查是否成功提取文件夹名
if [[ -z "$folder_name" ]]; then
    echo "无法从URL $original_url 提取文件夹名" >> ~/script_error.log
    exit 1
fi

# 创建目标文件夹(不存在则自动创建)
mkdir -p "$folder_name"

# 将下载文件移动到目标文件夹,保留原文件名
mv "$downloaded_file" "$folder_name/$(basename "$downloaded_file")"

echo "文件 $(basename "$downloaded_file") 已移动到文件夹 $folder_name" >> ~/script.log

给脚本添加执行权限:

chmod +x ~/script.sh

步骤2:修正yt-dlp调用命令

用yt-dlp的占位符传递正确的参数:

  • %(webpage_url)s:代表批量文件里的原始视频URL(这才是你需要提取文件夹名的来源)
  • {}:代表下载完成后的文件路径(默认值,也可以用%(filepath)s)

修改后的命令:

yt-dlp --referer "https://ppppppppppp.com/" --add-header "Cookie:COOKIE" --batch-file links_da_scaricare.txt -o '%(title)s.%(ext)s' --exec "~/script.sh %(webpage_url)s {}"

注意:这里把-o参数改成了%(title)s.%(ext)s,避免yt-dlp提前生成NA文件夹,后续由脚本统一管理文件路径。


Cygwin环境额外注意事项

  • 确保脚本路径用Cygwin格式:~/script.sh对应C:\cygwin64\home\Administrator\script.sh,如果用Windows路径需要转成Cygwin识别的格式(比如/cygdrive/c/cygwin64/home/Administrator/script.sh)
  • 可以先单独测试脚本是否正常工作:
    ./script.sh "https://www.ppppppppppp.com/it/yyyy/911-omicidio-al-telefono/stagione-1-appesa-a-un-filo" "test.mp4"
    
    执行后应该会生成911-omicidio-al-telefono文件夹,并把test.mp4移动进去。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:05:17