【问题标题】:Manipulating strings (file extensions) in bash using find [duplicate]使用 find [重复] 在 bash 中操作字符串(文件扩展名)
【发布时间】:2016-09-24 08:27:14
【问题描述】:

我在 bash 中处理字符串时遇到问题。我想重写扩展。

我在下载目录中有以下 2 个文件

  • 示例 001.mkv
  • 示例 002.mkv

使用下面的脚本,我总是返回相同的文件名,而无需将 .mkv 重写为 .mp4。

find /Downloads -name \*.mkv -execdir echo $(file={}; echo ${file/mkv/mp4};) \;

我知道这不是重新格式化文件所需的全部内容,但此脚本是传递给 FFMPEG 的较大脚本的一部分。

这是 FFMPEG 的完整命令。

find /Downloads -name \*.mkv -execdir ffmpeg -i {} -vcodec copy -acodec copy $(file={}; echo ${file/mkv/mp4};) \;

【问题讨论】:

  • 我已经尝试了该帖子中的许多示例,但仍然没有运气。我已经添加了我正在使用的完整命令。
  • 您可以尝试在 -execdir 命令之后使用 bash -c,查看我的答案以获取示例。

标签: string bash macos ffmpeg find


【解决方案1】:

你可以尝试使用 bash -c 来执行你的命令

find /Downloads -name \*.mkv -execdir bash -c 'file={}; echo ${file/.mkv/.mp4}' \;

【讨论】:

    【解决方案2】:

    exec 和 execdir 通常用于实际执行命令,而不是回显/打印有关找到的文件的信息 (print/printf)。

    有几种方法可以做到这一点,这里有一种。

    您可以先尝试使用 rename 命令,该命令可以使用正则表达式替换来重命名文件。这将需要将所有文件重命名为位于同一文件夹 /Downloads 中:(语法可能非常取决于发行版附带的重命名实现)

    ls *.mkv
    a.mkv  b.mkv
    rename .mkv .mp4 *.mkv
    ls *.mp4
    a.mp4
    b.mp4
    

    假设 mkv 文件也存在于 /Downloads 的子目录中:

    find . -type f -name "*.mkv"
    ./sundir/d.mkv
    ./sundir/c.mkv
    ./a.mkv
    ./b.mkv
    find -type f -name "*.mkv" -exec rename .mkv .mp4 {} \;
    find . -type f -name "*.mp4"
    ./sundir/c.mp4
    ./sundir/d.mp4
    ./b.mp4
    ./a.mp4
    

    【讨论】:

      猜你喜欢
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2017-10-28
      • 1970-01-01
      • 2013-05-11
      • 2013-10-07
      • 1970-01-01
      相关资源
      最近更新 更多