Найти файлы и конвертировать HandBrakeCLI в одну строку

Не уверен, что это возможно...

Я пытаюсь написать терминальную команду (linux), которая найдет все видеофайлы с определенным расширением, а затем преобразует их с помощью HandBrakeCLI

У меня есть первая половина этого вниз:

find . -type f -name "*.avi*" -exec

И у меня есть рабочая команда HandBrakeCLI:

HandBrakeCLI -i file.mkv -o file2.mkv -e x265 --vfr -q 20 --all-audio --all-subtitles

Я не смог понять, как вставить имя файла / путь для файлов, найденных в находке, в файл.mkv, а затем вывести преобразованный файл с тем же именем, но в формате mkv.

Можно ли сделать это в одну строку или мне нужно разбить это в сценарии bash?

1 ответ

Решение

В качестве однострочника попробуйте что-то вроде:

find . -type f -name "*.avi" -print0 | perl -pe 's/\.avi\0/\0/g' | xargs -0 -I% HandBrakeCLI -i %.avi -o %.mkv -e x265 --vfr -q 20 --all-audio --all-subtitles

Опция -print0 в find выводит имя файла в стандартном выводе, за которым следует нулевой символ.
Следующий фрагмент perl удаляет расширение.avi для предоставления базового имени для xargs.
Опция -I% в xargs заменяет "%" именами, считанными из стандартного ввода.

Другие вопросы по тегам