
Как написано в заголовке, я хотел бы запустить команду ТОЛЬКО после того, как предыдущая команда 'youtube-dl' завершится и закроется. Я не запускаю эту команду на bash, а только на терминале ubuntu.
Я хотел бы выполнить эту команду:
Youtube-dl -o output.file link ; sleep 4 ; mv output* /to-directory
Команда 1 может выполняться от 5 секунд до xx минут, и если я укажу только сон на 4 секунды, то может не хватить времени для выполнения команды 2, когда команда 1 завершится и закроется, независимо от результата. Я мог бы использовать сон 4 для неопределенного таймлапса, но это действительно затруднит мою скорость выполнения команд в целом.
решение1
Если вы действительно хотите только переместить файл, почему бы не вывести его сразу в целевой каталог?
youtube-dl -o /to-directory/output.file link
Если вы хотите выполнить какую-то другую, гораздо более сложную задачу, вы можете использовать опцию --exec
, описанную в конце youtube-dl -h
, тогда команда будет выглядеть так:
youtube-dl -o output.file link --exec 'mv {} /to-directory/'
Вот рабочий пример:
youtube-dl -o irakli https://youtu.be/FyV_49qbvU4 --exec 'mv {} ~/Desktop/'
После выполнения команды файл irakli.mkv
будет у вас в Desktop
. Приятного просмотра!
Бонус-трек :) Вот один скрипт, который я использую для загрузки mp3 с youtube.com, просматривая его через браузер на компьютере.
cat /usr/local/bin/youtube-dl-clipboard # The file must be executable, of course
#!/bin/sh
notify-send "YouTube-Download BEGIN"
youtube-dl -i -x --audio-format mp3 --output "$HOME/Downloads/%(title)s.%(ext)s" "$(xclip -o)"
- Обратите внимание, что скрипт использует
xclip
, поэтому его следует установить вместе с последней версиейyoutube-dl
.
Создайте пользовательский ярлык следующим образом:
Затем, пока вы просматриваетеyoutube.com, просто скопируйте ссылку на любое понравившееся вам видео - Ctrl+ C, а затем нажмите Ctrl+ Alt+ V. Через несколько секунд новый mp3-файл будет доступен в каталоге загрузок.
решение2
Youtube-dl -o output.file link && sleep 4 && mv output* /to-directory
или даже лучше:
Youtube-dl -o /to-directory/output.file link
вам не придется ничего перемещать в дальнейшем.
Если youtube-dl действительно работает в фоновом режиме и настроен на завершение работы после загрузки,
вы можете использовать:
youtube-dl -o output.file link; while :;do sleep 1; [[ $(ps -C youtube-dl -o pid=) ]] || break;done; mv output.* /to-directory/
Объяснение
while :;
- бесконечный цикл, предназначенный для ожидания завершения youtube-dl.
[[ $(ps -C youtube-dl -o pid=) ]] || break
- проверка, существует ли идентификатор процесса для youtube-dl. если существует, повторить цикл. В противном случае завершить цикл (используя break
).
ПРИМЕЧАНИЕ: pidof Youtube-dl
команда может использоваться для получения идентификатора процесса для программы. Однако, поскольку youtube-dl вызывается с помощью python3, у него нет собственного процесса. Таким образом, pidof youtube-dl
в этом случае не будет получено значение. Таким образом, ps
команда была использована для получения pid.