Зацикливание скрипта bash - PullRequest
0 голосов
/ 10 февраля 2020

Как только я запустил это convertscript.sh, я хочу, чтобы он постоянно проверял файлы в каталоге, если есть .mkv, он преобразует его, что прекрасно в данный момент, но когда не осталось файлов mkv кажется, что он выходит из сценария, но я хочу, чтобы он l oop и продолжал постоянно пытаться выполнить сценарий.

Обычно, если новый файл добавляется, скажем, ночью, потому что сценарий постоянно повторяется, он выбирает его вверх, я не хочу снова запускать convertscript.sh. Я хочу запустить convertscript.sh один раз, а потом не трогать его.

Сценарий, который я получил, находится ниже:

shopt -s globstar
for f in **/*.mkv
do 
    ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
    [[ $? -eq 0 ]] && rm "$f";
done

1 Ответ

1 голос
/ 10 февраля 2020

Если вы хотите l oop навсегда, вы должны сказать об этом.

shopt -s globstar
while true; do
    for f in **/*.mkv; do 
        ffmpeg -i "$f" -c:v libx264 -preset ultrafast \
            -minrate 4.5M -maxrate 4.5M -bufsize 9M \
            -c:a ac3 "${f%mkv}mp4" &&
        rm "$f"
    done
    # Don't consume CPU by looking for new files immediately
    sleep 1
done

Обратите внимание, как мы избегаем $? антипаттерна. Возможно, увеличим sleep до пяти минут или около того, как только вы убедитесь, что это работает, как запланировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...