I have the following directory structure:
JavaScript
x
dir1/file.ogg
dir2/file.ogg
dir3/file.ogg
file2.ogg
I would like to convert all .ogg
files to .wav
with GNU Parallel. Here’s where I got thus far:
JavaScript
find . -name '*.*' -type f -print0 | parallel -0 ffmpeg -i {} outputdir/{/.}.wav
The problem here is that although obviously directories have different names, the files inside have the same name. The aforementioned command will continuously overwrite the content of the directory. What I’d like instead is:
JavaScript
outputdir/dir1_file.ogg
outputdir/dir2_file.ogg
outputdir/dir3_file.ogg
outputdir/dir3_file2.ogg
Essentially, I’d like to extract the subdirectory name and concatenate it with file basename and put my own extension.
Any ideas?
Advertisement
Answer
Using perl transformation, this command should achieve the required effect :
JavaScript
find . -name '*.ogg' -type f -print0 | parallel -0 echo ffmpeg -i {} outputdir/{= '$_ =~ s[^./][]; $_ =~ s[/][_]g; $_ =~ s[ogg$][wav]g;' =}
Remove echo
to run ffmpeg command