我有一个包含不同类型文件的文件夹。我想转换所有以例如结尾的
.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.ogg
和The_Hedgehog_Song.ogg
都会得到正确处理。