使用 bash 将当前文件夹中的所有文件转换为多个扩展名并维护其名称的简洁方法

使用 bash 将当前文件夹中的所有文件转换为多个扩展名并维护其名称的简洁方法

我有一个包含不同类型文件的文件夹。我想转换所有以例如结尾的

.ogg .flac, .m4a

使用以这种方式工作的命令

converter inputfilename outputpath/ouputfilename.outputextension

我努力了

for audfile in *.ogg *.m4a *.flac; do
    filename=${audfile%.*}
    converter "$audfile" "done/$audfile.mp3"
done

这还有一个问题,即打印 No such file or directory 对于每个没有文件匹配的扩展名(忽略没有匹配的格式会更优雅)。您建议如何正确且简洁地做到这一点?

答案1

人们常说你不应该迭代目录输出,我猜想通配符通配符*与会类似。

相反,您应该使用该-exec选项,find例如

find . -maxdepth 1 -name "*.ogg" -exec converter {} done/{}.mp3 \;

这表示“在当前目录中查找(并且不要进一步查找)任何以 .ogg 结尾的文件并运行命令转换器 filename.ogg did/filename.ogg.mp3”

find 命令应该处理任何需要执行的转义,因此The Hedgehog Song.oggThe_Hedgehog_Song.ogg都会得到正确处理。

相关内容