【问题标题】:How to get bash code to work on all files in folders and subfolders?如何让 bash 代码处理文件夹和子文件夹中的所有文件?
【发布时间】:2019-06-05 09:00:05
【问题描述】:

我有一个代码,它使用ffmpeg 将文件夹中所有文件的*.avi 转换为*.mp4。我希望它在所有文件夹和子文件夹上运行;并将结果保存在此子文件夹中。

我已经尝试过 find 但没有成功

#!/bin/bash

for i in *.avi; 
do
    ffmpeg -i /location/"$i" -c:v libx264 -preset ultrafast \
       -strict -2 -n /location/"$(basename  "$i" .avi)".mp4
done

【问题讨论】:

  • 上面的代码有什么错误?
  • /location/"$(basename ...)" 看起来很可疑。你真的在文件系统的根目录中有一个名为location 的文件夹吗?
  • 如果你想展示你已经用 find 尝试过但没有成功,我们可以告诉你如何解决它。
  • location is X... 错误是这里缺少代码。看不起马克西姆的回答

标签: linux bash shell sh


【解决方案1】:

您可以使用find在所有子目录中查找匹配的文件:

find <top-dir> -iname "*.avi" | while read filename; do ffmpeg -i "$filename" ... "${filename%avi}mp4"; done

... 替换为您的ffmpeg 选项。

您还可以使用 GNU parallel 实用程序在多个 CPU 上并行处理找到的文件:

find <top-dir> -iname "*.avi" | parallel -i -- ffmpeg -i "{}" ... "{.}.mp4"

【讨论】:

    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多