Bash скрипт для скачивания нескольких файлов из списка - PullRequest
0 голосов
/ 01 апреля 2020

Надеюсь, у вас все хорошо. Мне было интересно, если вы можете написать bash скрипт, который выглядит примерно так TOPIC1

HTTP:....

HTTP:...

TOPIC2

HTTP:...

HTTP:...

TOPIC3

HTTP:...

HTTP:...

Et c, et c.

Все эти данные сохранены в тексте файл, и я хотел бы сценарий bash, который создаст каталог с именем TOPI C в качестве папки, а затем загрузит каждый из URL-адресов в TOPI C и затем перейдет к следующему, создайте и затем загрузите все URL-адреса для этого.

Имеет ли это смысл? У меня очень, очень минимальный опыт работы с bash.

Я мог бы легко загрузить только один, используя команду youtube-dl, но делать это по одному было бы очень громоздко.

Приветствия

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Чтобы создать исполняемый скрипт bash для решения вашей проблемы, вставьте этот блок кода в файл с именем «download. sh» в той же директории, где у вас есть файл «links.txt» do c:

#!/bin/bash
topics=($(grep -v "http" links.txt))
for ((i = 0 ; i < ${#topics[@]} ; i++))
do
mkdir ${topics[$i]}
cd ${topics[$i]}
sed -n "/^${topics[$i]}/,/^${topics[$i+1]}/p" ../links.txt |\
sed '1d;$d' > to_be_downloaded.txt
youtube-dl -a to_be_downloaded.txt
rm to_be_downloaded.txt
cd ../
done

Сохраните сценарий, затем измените разрешения сценария на «исполняемый», вставив его в терминал:

chmod +x download.sh

И затем выполните команду скрипт из терминала:

./download.sh

Как и раньше, это не удастся для последней topi c в вашем файле links.txt: выполните эти пропущенные URL-адреса вручную. Дайте мне знать, если у вас возникнут проблемы.

1 голос
/ 01 апреля 2020

Это решение основано на разбиении вашего текстового файла на куски и последующей передаче URL-адресов в youtube-dl с помощью функции '-a':

-a, --batch-file FILE Файл, содержащий URL-адреса для загрузки ('-' для стандартного ввода), один URL на строку. Строки, начинающиеся с '#', ';' или ']' считаются комментариями и игнорируются.

topics=($(grep -v "http" file))
for ((i = 0 ; i < ${#topics[@]} ; i++))
do
mkdir ${topics[$i]}
cd ${topics[$i]}
sed -n "/^${topics[$i]}/,/^${topics[$i+1]}/p" ../file |\
sed '1d;$d' > to_be_downloaded.txt
youtube-dl -a to_be_downloaded.txt
rm to_be_downloaded.txt
cd ../
done

Это не удастся для последней топи c в "файле" (ваш список): выполните эти пропущенные URL-адреса вручную. Он должен работать как требуется для всех остальных.

...