我想将 .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/