在bash中,查找不存在相关文件的文件列表

时间:2018-11-10 15:39:15

标签: bash find

我有一个要转换的视频列表。要建立我需要使用的文件列表,请使用以下内容:

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 :(得分:0)

这可能对您有用

    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,但我认为这不是必须的。