Se bem entendi, você quer abrir uma instância flac … | lame …
para cada linha de entrada e interpolar a entrada nos argumentos para ambos os comandos.
Como você precisa de xargs
para iniciar um pipeline, é necessário iniciar um programa capaz de criar pipelines, ou seja, um shell.
inotifywait -m -r -q -e moved_to --format "%w%f" ~/test |
xargs -l sh -c 'flac -cd "$0" - | lame -b 320 - "/media/1tb/$0.mp3"'
Como alternativa, peça ao shell de chamada que leia as linhas uma a uma e execute o pipeline.
inotifywait -m -r -q -e moved_to --format "%w%f" ~/test |
while IFS= read -r file; do
flac -cd "$file" - | lame -b 320 - "/media/1tb/$file.mp3"
done
Tenha em atenção que o formato %w%f
produz um caminho absoluto, ao qual preestende /media/1tb
e acrescentar .mp3
. Se você quiser remover a parte do diretório do arquivo no comando lame
, altere $file
para ${file##*/}
. Se você quiser remover a extensão, altere $file
para ${file%.*}
. Se você quiser fazer as duas coisas, terá que fazer isso em duas etapas. Se você quiser reproduzir a hierarquia de diretórios em /media/1tb
, use mkdir -p
.
cd ~/test
inotifywait -m -r -q -e moved_to --format "%w%f" . |
while IFS= read -r file; do
[ -f "$file" ] || continue; # skip directories and other special files
dir=${file%/*}; file=${file##*/}
mkdir -p "/media/1tb/$dir"
flac -cd "$dir/$file" - | lame -b 320 - "/media/1tb/$dir/${file#.*}.mp3"
done