Você está usando a string de substituição errada com parallel
; você também precisará de -q
para passar argumentos citados e não tenho certeza do que o \;
à direita faz ...
Exemplo:
dirname_with_spaces="/home/don/my dir with spaces/"
(observe o% arrastado /
no caminho atribuído a dirname_with_spaces
) e alguns mp3
nomes de arquivos com espaços em um diretório test
, logo abaixo de cwd
:
./test/Commercial DEMO - 09.mp3
./test/Commercial DEMO - 11.mp3
./test/Handel Royal Fireworks - 07.mp3
./test/Jazz Rag Ensemble - 10.mp3
./test/Mouret - Rondeau.mp3
usando
find . -type f -iname \*.mp3 | parallel -q ffmpeg -i {} -acodec \
libmp3lame -ab 128k "$dirname_with_spaces"{/.}-128k.mp3
produz os seguintes arquivos:
/home/don/my dir with spaces/Commercial DEMO - 11-128k.mp3
/home/don/my dir with spaces/Commercial DEMO - 09-128k.mp3
/home/don/my dir with spaces/Handel Royal Fireworks - 07-128k.mp3
/home/don/my dir with spaces/Jazz Rag Ensemble - 10-128k.mp3
/home/don/my dir with spaces/Mouret - Rondeau-128k.mp3
Observe a linha de comando q
uoting ( parallel -q
) e o uso de:
{}
Input line.
que significa o caminho de find
output, e. ./test/Mouret - Rondeau.mp3
e
{/.}
Basename of input line without extension.
que se expande para Mouret - Rondeau
e, em seguida, "$dirname_with_spaces"{/.}
se expande para /home/don/my dir with spaces/Mouret - Rondeau
O último é bem diferente do {.}
usado no seu comando
{.}
Input line without extension.
que se expandiria para ./test/Mouret - Rondeau
e, em seguida, "$dirname_with_spaces"{.}
se expandiria para /home/don/my dir with spaces/./test/Mouret - Rondeau
. Obviamente, isso causará um erro, pois não há /./test/
sob /home/don/my dir with spaces
.