AFAIK, nesse contexto, o {}
não é realmente "shell curly chaves" (no sentido de expansão de chave por exemplo), eles são apenas espaços reservados textuais para argumentos. Como tal, você poderia passá-los em um comando shell e usar o recurso de substituição de parâmetros do shell para modificar os nomes, como
sh -c 'for f; do somecommand "$f" "${f%.*}.al"; done' sh {}
Para ilustrar com um comando mais simples, dado
$ tree
.
├── dir
│ ├── other file.mp3
│ └── some file.csv
├── other file.txt
└── some file.mp3
1 directory, 4 files
Então
$ find . -name '*.mp3' -print0 | xargs -0 -I {} sh -c 'for f; do printf "%s --> %s\n" "$f" "${f%.*}.al"; done' sh {}
./dir/other file.mp3 --> ./dir/other file.al
./some file.mp3 --> ./some file.al
ou (se o find
do seu sistema suportar)
$ find . -name '*.mp3' -exec sh -c 'for f; do printf "%s --> %s\n" "$f" "${f%.*}.al"; done' sh {} +
./dir/other file.mp3 --> ./dir/other file.al
./some file.mp3 --> ./some file.al