【问题标题】:Bash script to search and rename recursively用于递归搜索和重命名的 Bash 脚本
【发布时间】:2012-05-27 23:47:15
【问题描述】:

我有一个将 *.mkv 文件转换为 *.avi 文件的 bash 脚本。这是它的样子:

#!/bin/bash
for f in $(ls *mkv | sed ‘s/\(.*\)\..*/\1/’)
do
ffmpeg -i $f.mkv -sameq $f.avi
done

然而,我需要这个脚本做的是,它需要在所有文件夹中递归搜索 *.mkv 文件,然后运行 ​​ffmpeg 命令并将输出保存到同一目录。

请问有人可以帮我吗? :-)

【问题讨论】:

    标签: bash scripting ffmpeg avi mkv


    【解决方案1】:
    find /some/path -name '*.mkv' | while read f
    do
        ffmpeg -i "$f" -sameq "${f:0:-4}.avi"
    done
    

    【讨论】:

    • 呃。永远不要使用 sed 来替换变量中的扩展名。
    • 呃2。当 POSIX 解决方案执行时,切勿使用 bashism :-) ${f%mkv}avi。谢谢收听;这些天来一个罕见的特征...... +1
    • 模式匹配是对 CPU 周期的浪费,您已经知道需要去除固定数量的字符,即使它是一种 bashism。
    • @lanzz 我不断得到这个输出:
    • Justins-MacBook:Desktop justinhartman$ sh mkv2avi.sh mkv2avi.sh: line 4: -4: substring expression < 0
    【解决方案2】:

    试试这样:

    find <file_path> -name '*.mkv' -exec sh -c 'mv "$0" "${0%%.mkv}.avi"' {} \;
    

    【讨论】:

    • 您似乎在末尾缺少一个分号。
    • 您似乎还认为从 Matroska 转换为 AVI 只是简单的重命名问题。
    • 我会在参数扩展中使用两个百分号,以确保您只删除最后的“.mkv”。这可以防止“.mkv”在名称中出现多次的罕见情况。
    • @Dennis,不确定,但假设文件名类似于 somemkvfile.mkv。
    • @Rahul @lanzz 这似乎使用 ffmpeg 很好地工作:find /Users/justinhartman/Movies/Game\ of\ Thrones -name '*.mkv' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mkv}.avi"' {} \;
    【解决方案3】:
    #!/bin/bash
    find . -name "*.mkv" -exec ffmpeg -i {} -sameq `basename {} .mkv`.avi \;
    

    【讨论】:

      【解决方案4】:

      感谢@Raul,这对我有用,也是我想做的解决方案,它通过目录递归运行并在 mkv 文件上运行 ffmpeg 命令:

      #!/bin/bash
      find <file_path> -name '*.mkv' -exec sh -c 'ffmpeg -i "$0" -sameq "${0%%.mkv}.avi"' {} \;
      exit;
      

      【讨论】:

        【解决方案5】:

        find . -name "*.mkv"代替ls *.mkv

        这假定没有有趣的文件名(没有空格、换行符)。另一种可能性是将findxargs 结合使用。 xargs 手册提供了指导性的阅读材料,这将节省您一天的脚本寿命:-)

        【讨论】:

        • 但这不做目录递归,这正是手头的问题。
        猜你喜欢
        • 2011-12-25
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        • 2013-06-29
        • 1970-01-01
        • 2011-01-11
        • 2017-09-15
        • 1970-01-01
        相关资源
        最近更新 更多