gpt4 book ai didi

bash - 用sox连接子文件夹中的文件

转载 作者:行者123 更新时间:2023-12-02 23:02:00 26 4
gpt4 key购买 nike

我有一个包含子文件夹的文件夹,该子文件夹包含我需要连接的WAV文件,因此每个文件夹有1个WAV文件。

在每个单独的文件夹中,我都可以使用sox来执行:sox *.wav combined.wav,但我有1000个文件夹。

我如何:

a)编写命令(使用Mac终端)以串联每个子文件夹的子文件夹中的所有文件?
b)确保生成的文件具有合适的名称,例如子文件夹的名称?

我试图在下面举例说明我的文件结构:

例如

音频文件

170

170_a.wav

170_b.wav

170_c.wav

170_d.wav



171

171_a.wav

171_b.wav

171_c.wav

171_d.wav



等等

我想以170_combined.wav和171_combined.wav等结束

最佳答案

您可以尝试使用find

find . -type d -exec bash -O nullglob -c 'cd "$0" && files=(*.wav) && ((${#files[@]})) && echo sox "${files[@]}" "${0##*/}_combined.wav"' {} \;
  • 除了将输出打印到stdout,它什么都不会做。
  • 如果您认为输出正常,请删除echo,因此它将实际上转换文件。

  • 简要说明。
  • -type d表示find仅查找目录。
  • 使用
  • -exec,以便我们可以调用/调用Shell来执行Shell任务。
  • bash -O nullglob万一没有文件,则lob *.wav不会扩展。 (不会将任何文件添加到array files)
  • -c执行shell命令
  • cd "$0" &&进入每个目录的内部&&如果下一个命令成功执行,则运行下一个命令。
  • files=(*.wav) &&创建一个*.wav文件数组
  • ((${#files[@]}))如果数组不为空(有*.wav文件)
  • sox "${files[@]}" "${0##*/}_combined.wav在所有sox文件上运行*.wav"${0##*/}从路径名中删除文件名。
  • 关于bash - 用sox连接子文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61226896/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com