Я использую youtube-dl в основном для загрузки каналов или плейлистов. Однако, если это плейлист, я не хочу использовать тот же шаблон вывода, как если бы это был канал. Есть ли способ достичь этого?
# If it is a channel, use this:
-o ./Downloads/Channels/%(uploader)s_%(channel_id)s/%(upload_date)s_%(title)s_%(display_id)s.%(ext)s
# If it is a playlist, use this:
-o ./Downloads/Playlists/%(playlist_title)s_%(playlist_id)s/[%(playlist_index)s] %(upload_date)s_%(title)s_%(display_id)s.%(ext)s
URL-адреса каналов Youtube содержат /channel/
, я бы просто проверил эту строку и установил соответствующий параметр с помощью небольшой функции:
yt() {
for i in "$@"; do
if [[ "$i" =~ .*/channel/.* ]]; then
opt="channel"
else
opt="playlist"
fi
echo youtube-dl -o "$opt" "$i"
done
}
Это определяет функцию yt
, которая перебирает ее arguments, устанавливает для переменной opt
значение "channel"
, если аргумент содержит строку «/ channel /», или "playlist"
, если нет, и запускает echo youtube-dl
с опцией и аргументом. Запустите его со списком каналов и плейлистов, чтобы увидеть, как он выполняет:
$ yt channel test something_with_/channel/_here
youtube-dl -o playlist channel
youtube-dl -o playlist test
youtube-dl -o channel something_with_/channel/_here
Замените "channel"
на строку параметров (без начального -o
!) Для каналов и "playlist"
на строку для плейлисты, проверьте с реальными URL-адресами, печатает ли теперь функция правильные команды и, наконец, удалите команду echo
, чтобы она действительно выполнялась youtube-dl
.
Я храню функции bash
в отдельном файле ~/.bash_functions
и отправляю их в мой ~/.bashrc
, другие предпочитают иметь функции непосредственно в последнем файле, в любом случае, как вы определили его в каждом новом терминале.