Outra opção seria usar o globbing do bash para encontrar os arquivos wav, depois os recursos de expansão de parâmetros do shell para alterar a estrutura de diretórios e nomes de arquivos:
shopt -s globstar nocaseglob
for input in Music/**/*.wav
do
indir=$(dirname "$input")
outdir=${indir/#Music/Music_Flac}
[ ! -d "$outdir" ] && mkdir -p "$outdir"
infile=$(basename "$input")
outfile=${infile%.???}.flac
echo ffmpeg -i "$input" "${outdir}/${outfile}"
done
Se os arquivos forem sempre *.wav
e *.WAV
, você poderá ignorar o shopt nocaseglob
e usar for input in Music/**/*.wav Music/**/*.WAV
.
Eu não sei quais opções você deseja usar para o ffmpeg, mas eu forneci um exemplo de echo
dos caminhos de arquivo de entrada e saída que você pode construir.
Nesta árvore de diretórios de amostra:
$ tree Music
Music
├── a.wav
├── b.WAV
├── c d.wav
└── subdir1
├── a.wav
├── b.WAV
├── c d.wav
└── subdir2
├── a.wav
├── b.WAV
└── c d.wav
a saída do comando de amostra é:
ffmpeg -i Music/a.wav Music_Flac/a.flac
ffmpeg -i Music/b.WAV Music_Flac/b.flac
ffmpeg -i Music/c d.wav Music_Flac/c d.flac
ffmpeg -i Music/subdir1/a.wav Music_Flac/subdir1/a.flac
ffmpeg -i Music/subdir1/b.WAV Music_Flac/subdir1/b.flac
ffmpeg -i Music/subdir1/c d.wav Music_Flac/subdir1/c d.flac
ffmpeg -i Music/subdir1/subdir2/a.wav Music_Flac/subdir1/subdir2/a.flac
ffmpeg -i Music/subdir1/subdir2/b.WAV Music_Flac/subdir1/subdir2/b.flac
ffmpeg -i Music/subdir1/subdir2/c d.wav Music_Flac/subdir1/subdir2/c d.flac
... juntamente com os comandos mkdir
necessários ao longo do caminho.