В bash найдите список файлов, для которых связанный файл не существует - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть список видео, для которых я хотел бы конвертировать. Чтобы создать список файлов, с которыми мне нужно работать, я использую следующее:

file_list=( $(find . \( \
    -name '*.[Mm][Oo][Vv]' -o \
    -name '*.[Aa][Vv][Ii]' -o \
    -name '*[!-][!h][!v][!c][!1].mp4' \
    \) -print) )

task_list=()
for i in "${!file_list[@]}" ; do
    m="${file_list[$i]}"
    n="${m%.*}-hvc1.mp4"
    if [[ ! -f "$n" ]] ; then
        task_list+=("$m")
    fi
done

Есть ли какой-нибудь способ, которым я мог бы сложить эту логику в find и получить список файлов за один проход, или я застрял с этим двухпроходным сценарием, где я делаю find, а затем я должен сделать петля?

1 Ответ

0 голосов
/ 10 ноября 2018

Может быть, это работает для вас

    task_list=()
    for file in  *.[Mm][Oo][Vv] *.[Aa][Vv][Ii] *[!-][!h][!v][!c][!1].mp4 ; do
        n="${file%.*}-hvc1.mp4"
        if [[ ! -f "$n" ]] ; then
            task_list+=("$file")
        fi
    done

Не использует find, но я полагаю, что это не обязательно.

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