Вы можете использовать eval
, чтобы попробовать синтаксис массива:
is_array_support() (
eval 'a=(1)'
) >/dev/null 2>&1
if is_array_support; then
echo support
else
echo not
fi
Параметр -I
в mkvmerge
был удален и заменен параметром -J
, который выводит JSON. Вот сценарий lumato , адаптированный для использования с (требует установки jq
, см. эту ссылку для получения инструкций по установке ОС)
#!/bin/bash
# If no directory is given, work in local dir
if [ -d "$1" ] || [ -f "$1" ]; then
DIR="$1"
else
echo "No target path given, using working directory '$(pwd)'"
DIR="."
fi
# Get all the MKV files in this dir and its subdirs
find "$DIR" -type f -name '*.mkv' | while read filename
do
subs=$(mkvmerge -J "$filename" | jq -r '.tracks[] | select(.type=="subtitles") | select(.properties.language=="eng").id' | sed 'N;s/\n/,/')
if [[ -n $subs ]]
then
subs="-s $subs"
else
subs=-S
fi
echo -e "Extracting tracks \e[1m\e[34m${subs#* }\e[0m from \e[1m\e[34m${filename}\e[0m..."
mkvmerge $subs -o "${filename%.mkv}".eng-srt-only.mkv "$filename" > /dev/null 2>&1
done