Combinando vários comandos do youtube-dl em um script

2

Foi recomendado para mim por um usuário aqui que eu fiz um post perguntando como eu posso combinar vários downloads do youtube-dl em um único script para ser executado. Estou baixando muitos canais do youtube e atualmente tenho todos os canais em um arquivo .sh diferente que eu posso rodar, mas foi dito que posso combiná-los todos em um arquivo. Um exemplo dos meus scripts é:

./youtube-dl ytuser:user -ciw -o "/path/to/directory/%(upload_date)s-% \
(title)s.%(ext)s" --download-archive "/path/to/directory/downloaded.txt" \
--add-metadata --write-info-json --write-description --write-thumbnail \
--write-annotations --embed-subs -f \
"bestvideo[height<=720]+bestaudio/best[height<=720]" --merge-output-format \
"mkv"

Portanto, tenho esse script exato para cada canal diferente, exceto, é claro, modificado para que cada canal tenha seu próprio diretório. Como eu tenho tantos, eu queria colocar todos em .sh arquivos e então ter um script para executar todos os arquivos .sh , mas novamente foi dito que esse método era muito complicado e que havia uma maneira de colocar todos das diferentes linhas de comando em um único script a ser executado.

Esclarecimento: Portanto, o /path/to/directory/ será diferente para cada canal, geralmente não preciso de um URL, pois isso é feito pela seção ytuser:*user* do código. Se houver um URL, ele será adicionado apenas no final do código e o ytuser:*user* será excluído.

Atualmente, tenho muitos arquivos .sh diferentes que têm código específico para um canal, por exemplo, executar h3h3Productions.sh abrirá um terminal que baixa o canal "h3h3Productions" do YouTube em um diretório como /youtube-dl/videos/vlogs/h3h3Productions/ e A execução de WarLeaks.sh fará o download do canal do YouTube "WarLeaks" no diretório youtube-dl/videos/footage/WarLeaks/ .

Portanto, o código em cada arquivo .sh é relativamente o mesmo, mas o /path/to/directory/ e /path/to/directory/.downloaded.txt , para o código --archive-download , é diferente para todos eles e o ytuser:*user* também é diferente para cada canal.

O que eu quero fazer é ter apenas um arquivo .sh com o código para vários canais diferentes. Dessa forma, em vez de executar cada arquivo .sh individualmente, posso ter apenas um arquivo .sh que, quando executado, ativará todos os downloads contidos nele, já que terá o código para oito ou dez canais diferentes dentro dele.

Espero que ajude a esclarecer, se não, por favor, avise-me.

    
por Bencc 01.05.2017 / 17:44

1 resposta

0

Isso grita por uma função, que tal:

#! /bin/bash

yt(){
./youtube-dl "ytuser:" -ciw -o "/%(upload_date)s-%(title)s.%(ext)s" --download-archive "/downloaded.txt" --add-metadata --write-info-json --write-description --write-thumbnail --write-annotations --embed-subs -f "bestvideo[height<=720]+bestaudio/best[height<=720]" --merge-output-format "mkv"
}

yt "user" "/path/to/directory/"
yt "differentuser" "/path/to/other/directory/"
…

Os passos para conseguir isto são simples, apenas determine que partes do comando realmente mudam, substitua-o por variáveis, escreva uma função e chame-a conforme necessário. Pode haver uma solução melhor, mas precisaremos de alguns dos seus scripts precisos para encontrá-lo.

    
por dessert 08.08.2017 / 23:15