我有以下目录结构:
dir1/file.ogg
dir2/file.ogg
dir3/file.ogg
file2.ogg
我想将所有.ogg
文件转换为使用 GNU 并行.wav
。这是我到目前为止得到的地方:
find . -name '*.*' -type f -print0 | parallel -0 ffmpeg -i {} outputdir/{/.}.wav
这里的问题是,尽管显然目录具有不同的名称,但其中的文件具有相同的名称。上述命令将不断覆盖目录的内容。我想要的是:
outputdir/dir1_file.ogg
outputdir/dir2_file.ogg
outputdir/dir3_file.ogg
outputdir/dir3_file2.ogg
从本质上讲,我想提取子目录名称并将其与文件基名称连接起来,并放置我自己的扩展名。
有什么想法吗?
使用 perl 转换,此命令应达到所需的效果:
find . -name '*.ogg' -type f -print0 | parallel -0 echo ffmpeg -i {} outputdir/{= '$_ =~ s[^./][]; $_ =~ s[/][_]g; $_ =~ s[ogg$][wav]g;' =}
删除echo
以运行 ffmpeg 命令