Você poderia fazer:
find . -type f -name '*.flac' -execdir sh -c '
if [ ! -d mp3 ] && [ ! -d Mp3 ]; then
for file do
ffmpeg -i "$file" -qscale:a 2 -map_metadata 0 -id3v2_version 3 "${file%.*}.mp3"
done
fi' sh {} +
A idéia é que, com -execdir cmd {} +
, (com algumas versões do GNU find
), find
executará cmd
para todo o arquivo correspondente em um determinado diretório.
Eu digo algumas versões do GNU find porque ele costumava funcionar assim, mas foi quebrado em algumas versões de find
(onde você obteria uma cmd
invocação por arquivo como se você usou -execdir cmd {} \;
) e foi corrigido novamente em uma versão posterior.
Você pode verificar se tem uma versão correta com:
find . -execdir echo {} +
Você deve obter uma linha por diretório com uma versão correta ou uma linha por arquivo com as menos corretas.
Se você tiver uma versão correta e não tiver milhares de arquivos flac por diretório, poderá realizar as duas ações de uma só vez:
find . -type f -name '*.flac' -execdir sh -c '
if [ ! -d mp3 ] && [ ! -d Mp3 ]; then
mkdir Mp3 || exit
for file do
ffmpeg -i "$file" -qscale:a 2 -map_metadata 0 -id3v2_version 3 "Mp3/${file%.*}.mp3"
done
fi' sh {} +