在 GNU parallel 中连接目录和文件名
Concatenate directory and file name in GNU parallel
我的目录结构如下:
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
本质上,我想提取子目录名称并将其与文件基本名称连接起来,然后放上我自己的扩展名。
有什么想法吗?
使用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
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
本质上,我想提取子目录名称并将其与文件基本名称连接起来,然后放上我自己的扩展名。
有什么想法吗?
使用perl改造,这条命令应该可以达到要求的效果:
find . -name '*.ogg' -type f -print0 | parallel -0 echo ffmpeg -i {} outputdir/{= '$_ =~ s[^\./][]; $_ =~ s[/][_]g; $_ =~ s[ogg$][wav]g;' =}
删除 echo
到 运行 ffmpeg 命令