在 GNU 并行连接目录和文件名



我有以下目录结构:

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 命令

相关内容

  • 没有找到相关文章

最新更新