代码之家  ›  专栏  ›  技术社区  ›  Lukasz Tracewski

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

  •  -1
  • Lukasz Tracewski  · 技术社区  · 6 年前

    我有以下目录结构:

    dir1/file.ogg
    dir2/file.ogg
    dir3/file.ogg
         file2.ogg
    

    我想把所有的 .ogg 文件到 .wav 与GNU并行。到目前为止,我得到的是:

    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
    

    基本上,我想提取子目录名,并将其与文件basename连接起来,并放置自己的扩展名。

    有什么想法吗?

    0 回复  |  直到 6 年前
        1
  •  3
  •   Philippe    6 年前

    find . -name '*.ogg' -type f -print0 | parallel -0 echo ffmpeg -i {} outputdir/{= '$_ =~ s[^\./][]; $_ =~ s[/][_]g; $_ =~ s[ogg$][wav]g;' =}
    

    echo 运行ffmpeg命令