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

Bash如何读取文本文件每行内容为参数循环执行指定命令

批量参数映射及命令生成方案

你可以直接用awk工具完成文本字段拆分和命令批量生成,步骤如下:

  1. 字段拆分逻辑
    每一行的结构固定为日期-视频ID.webm.srt-开始时间 --> 结束时间,拆分规则:
  • 用-分割行内容,取第二部分拆分后得到YouTube视频ID,拼接为完整视频链接
  • 取第三部分按-->分割得到起止时间,可按需替换时间中的逗号为点适配脚本入参要求
  • 输出文件名可自定义规则避免重名
  1. 生成批量执行脚本
    执行如下命令,会读取你的txt文件,生成对应的下载命令到执行脚本:
awk -F'-' '{
    # 提取YouTube视频ID并拼接完整链接
    split($2, id_arr, ".")
    vid = id_arr[1]
    ytb_url = "https://www.youtube.com/watch?v=" vid
    # 提取起止时间并转换毫秒分隔符
    split($3, time_parts, " --> ")
    start_time = gensub(/,/, ".", "g", time_parts[1])
    end_time = gensub(/,/, ".", "g", time_parts[2])
    # 自定义输出文件名,此处使用视频ID+开始时间避免重名
    output_name = vid "_" start_time ".mp4"
    # 输出完整下载命令
    printf "sh download_youtube.sh \"%s\" \"%s\" \"%s\" \"%s\"\n", ytb_url, start_time, end_time, output_name
}' 你的输入文件.txt > batch_download.sh
  1. 执行下载
    检查生成的batch_download.sh内容符合要求后,运行脚本即可批量执行下载:
chmod +x batch_download.sh
./batch_download.sh

如果不需要留存脚本,也可以直接管道给bash执行:

awk -F'-' '{
    split($2, id_arr, ".")
    vid = id_arr[1]
    ytb_url = "https://www.youtube.com/watch?v=" vid
    split($3, time_parts, " --> ")
    start_time = gensub(/,/, ".", "g", time_parts[1])
    end_time = gensub(/,/, ".", "g", time_parts[2])
    output_name = vid "_" start_time ".mp4"
    printf "sh download_youtube.sh \"%s\" \"%s\" \"%s\" \"%s\"\n", ytb_url, start_time, end_time, output_name
}' 你的输入文件.txt | bash

提示:如果你的download_youtube.sh接受逗号作为毫秒分隔符,删除gensub替换逗号的代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:15:05