在folder1中搜索文件,如果该文件不在folder2中则执行脚本

在folder1中搜索文件,如果该文件不在folder2中则执行脚本

folder1仅包含.flv文件。

folder2仅包含.mp4文件。

中的所有.flv文件应该有一个以folder1结尾的相应文件:.mp4folder2

/folder1/123.flv/folder2/123.mp4

我需要一个脚本来查找任何.flv缺少 a 的脚本.mp4,并执行一个运行 mencoder 来创建相应的脚本.mp4。我已经尽力了,这就是我想出的办法,但我仍然坚持 IF THEN 语句。

for i in `find /folder1 -type f -iname '*.flv' -printf "%f\n" | 
    sed 's/.flv//g'` ; do 
    if [[ -n $(find /folder2/$i.mp4 -exec grep \-q 0 {} \;) ]] then
        /scripts/script.sh $i  fi ; done

bash 脚本需要像这样执行:

/scripts/script.sh $i 

所以文件名没有任何扩展名。

答案1

尝试这个:

find folder1 -type f -iname '*.flv' -exec bash -c \
    'f=${1#folder1/}; [ -f "folder2/${f%.flv}.mp4" ] || 
     scripts/script.sh "${1%.flv}"' none {} \;

这将适用于名称包含空格或其他困难字符的文件。

怎么运行的

  • find folder1 -type f -iname '*.flv'

    这会找到 flv 文件

  • -exec bash -c '...'

    对于找到的每个 flv 文件,这会告诉 find 运行 bash,该 bash 运行引号中的脚本(见下文)。

  • f=${1#folder1/}

    这将创建一个变量f,该变量具有 flv 文件的名称,但不带前导目录。

  • [ -f "folder2/${f%.flv}.mp4" ]

    这将测试是否存在相应的 mp4 文件。

  • ||

    这告诉 bash 仅当前面的命令返回 false 时才执行后面的命令(换句话说,如果没有找到这样的 mp4 文件)。

  • scripts/script.sh "${1%.flv}"'

    这将在那些缺少 mp4 文件的 flv 文件上运行您的脚本。提供的文件script.sh中已删除了该.flv部分。

  • none {}

    这告诉 bash 将字符串分配none$0(这个占位符从未使用过)并将由 找到的文件名find(表示为{})分配给 shell 变量$1

  • \;

    这标志着 find 命令的结束-exec

相关内容