【问题标题】:Concatenate directory and file name in GNU parallel在 GNU 并行中连接目录和文件名
【发布时间】:2020-05-31 11:53:00
【问题描述】:

我的目录结构如下:

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

我想使用 GNU Parallel 将所有 .ogg 文件转换为 .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

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

有什么想法吗?

【问题讨论】:

  • 你可以用rename做一个快速的第一次通过来重命名文件并在正确的目录中然后使用GNU Parallel进行格式转换......@987654321 @
  • @MarkSetchell 谢谢,如果不能使用parallel 单次通过,这是一个有效的选择。有两票声称这个问题与编程无关。 @Philippe 清楚地证明了它有一个编程解决方案(在 Perl 中)。也许下次我会更明确地表明我正在寻求值得的解决方案。

标签: linux bash ffmpeg gnu-parallel


【解决方案1】:

使用perl转换,这个命令应该可以达到要求的效果:

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

去掉echo运行ffmpeg命令

【讨论】:

  • 快到了。该解决方案的唯一问题是,以这种方式处理的每个文件都有一个前缀 ._,例如._dir1_file.ogg。由于我的 perl 不存在,我希望能帮助我修复最后一点。
  • 已更新,请查收,
猜你喜欢
  • 1970-01-01
  • 2017-10-22
  • 2023-03-21
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
相关资源
最近更新 更多