2016-04-15 5 views
2

Okay, also habe ich dieses kleine Problem mit einem Bash-Skript, das ich schreibe.youtube-dl Probleme (Scripting)

Dieses Skript sollte wie folgt ausgeführt werden:

<uploader>{<uploader_id>}/ 

Oder zumindest in einen Ordner namens

bash script.sh https://www.youtube.com/user/<random characters that make up a youtube channel ID> 

Es lädt einen kompletten YouTube Kanal

bash script.sh https://www.youtube.com/user/<channel name> 

OR

es sollte ...

Das Problem, das ich bekomme, ist, dass die Datei archive.txt, die youtube-dl erstellt, nicht im selben Verzeichnis wie die Videos erstellt wird. Es wird in dem Verzeichnis erstellt, aus dem das Skript ausgeführt wird.

Gibt es einen grep oder sed Befehl, den ich verwenden könnte, um die Datei archive.txt in den Videoordner zu bekommen?

Oder vielleicht erstellen Sie den Ordner FIRST, dann cd hinein, und führen Sie den Befehl von dort? I

weiß nicht, ist

Hier mein Skript:

#!/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 
+0

Sie sagen, dass das Archiv als 'archive.txt' erstellt werden soll, damit es im aktuellen Verzeichnis passiert. Wenn 'youtube-dl''% (uploader) s' usw. in diesem Argument nicht unterstützt, werden Sie auch Schwierigkeiten haben, das zu tun, was Sie wollen, nur mit diesem einen Befehl (oder einem Satz von Befehlen, es sei denn, Sie haben einen anderen Weg) den Uploader-Namen und die ID irgendwie bekommen). –

+0

@EtanReisner, yeah,% (Uploader) s, & tc ist eine Variable, die youtube-dl benutzt. Das wäre so viel einfacher, wenn youtube-dl das einfach als bash-Variable exportiert, dann könnte ich einfach eine einfache "cd" machen. – TheSqrtMinus1

+0

Das geht nicht. Das ist einfach nicht möglich. Es * könnte * jedoch die Formate im '--download-archive'-Argument unterstützen. Abgesehen davon müssen Sie die Ausgabe "parsen" und die Datei nach dem Herunterladen manuell in das richtige Verzeichnis verschieben. Dies könnte etwas sein, das es wert ist, aber mit youtube-dl zu archivieren. –

Antwort

0

ich es mit diesem endete Lösung:

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"" 

Im Grunde hatte ich die JSON mit grep zu analysieren, da die youtube-dl Devs sagte, dass die Implementierung von -o Variablen in jede andere Variable würde den Code verstopfen und aufgebläht machen.