linux - 查找文件,转换并存储在同一个子目录中

标签 linux bash sox

我想将 .au 音频数据集转换为 .wav。它按流派存储在文件夹中(流派 -> 摇滚、爵士、金属等)。我可以使用命令找到音频文件 -

find -type f -name '*.au'

但我不知道如何将该列表传递给 sox。该列表的开头还附加了子目录名称。我该如何删除它?

最佳答案

不是专家;加少许盐服用:

使用 awk 将 find 的输出转换为 sox 命令。然后将这些命令作为字符串传递给 bash,bash 将解释它们(就像给它们一个脚本一样):

find -type f -name '*.au' | awk '{printf "sox [your format options] %s %s\n",$0,$0".wav" }' | bash

我认为,一个更优雅且可能更好的解决方案是使用 xargs 将 awk 的输出转换为 sox 的参数;像这样的东西:

find -type f -name '*.au' | awk '{printf "[your format options] %s %s\n",$0,$0".wav" }' | xargs sox

但我不确定如何使用 xargs,所以...如果您想使用它,您可能需要充实细节。

Also that list has the sub-directory name appended to it at the beginning. How do I remove that?

为什么要删除它?您将需要它来引用目录中的文件。 Aynway,你可以使用类似这样的东西来代替查找:

ls Files/relationship/ | grep '\.old'

关于linux - 查找文件,转换并存储在同一个子目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28274884/

相关文章:

linux - 最好的 linux 文件系统过滤器选项?

bash - 在双引号内执行本地 bash 变量

bash - 为什么我不应该在 shell 脚本上使用 "bet the future of the company"?

python - 从python中的sox获取.wav的持续时间

linux - 如何在 Bash 中按字母顺序排列小数点后的数字

linux - 如何在 Linux Ubuntu 12.04 上安装 Laravel

c++ - 我如何将数据通过管道传输到 bzip2 并从其在 Linux 上的 C++ 中的标准输出中获取结果数据?

bash - awk 中 shell 变量的用法

c++ - 如何使用 soxlib for iOS 去除开始和结束静音

bash - 使用 sox 交叉淡化多个音频文件