好吧,所以我在编写bash脚本时遇到了这个小问题。
这个脚本应该这样运行:
bash script.sh https://www.youtube.com/user/<channel name>
或
bash script.sh https://www.youtube.com/user/<random characters that make up a youtube channel ID>
它将整个YouTube频道下载到一个名为的文件夹中
<uploader>{<uploader_id>}/
或者,至少应该。。。
我遇到的问题是youtube dl创建的archive.txt文件不是在与视频相同的目录中创建的。它是在运行脚本的目录中创建的。
有没有grep或sed命令可以用来将archive.txt文件放到视频文件夹中?
或者可以先创建文件夹FIRST,然后cd到其中,然后从那里运行命令?我不知道
这是我的脚本:
#!/bin/bash
pwd
sleep 1
echo "You entered: $1 for the URL"
sleep 1
echo "Now downloading all videos from URL "$1""
youtube-dl -iw
--no-continue $1
-f bestvideo+bestaudio --merge-output-format mkv
-o "%(uploader)s{%(uploader_id)s}/[%(upload_date)s] %(title)s"
--add-metadata --download-archive archive.txt
exit 0
我最终解决了这个问题:
uploader="$(youtube-dl -i -J $URL --playlist-items 1 | grep -Po '(?<="uploader": ")[^"]*')"
uploader_id="$(youtube-dl -i -J $URL --playlist-items 1 | grep -Po '(?<="uploader_id": ")[^"]*')"
uploaderandid="$uploader{$uploader_id}"
echo "Uploader: $uploader"
echo "Uploader ID: $uploader_id"
echo "Folder Name: $uploaderandid"
echo "Now downloading all videos from URL "$URL" to the folder "$DIR/$uploaderandid""
基本上,我必须用grep解析JSON,因为youtube dl devs说,在任何其他变量中实现-o类型的变量都会阻塞代码并使其膨胀。