Sua primeira tentativa deve funcionar. Não é? O que faz em vez disso?
* substitui todos os nomes de arquivos correspondentes, mas não executa a divisão em espaços internos posteriormente.
"Eu sei que lida bem com expressões regulares" - isso está errado. Primeiro, são os padrões de shell que você vê aqui, não expressões regulares. Segundo, não é ln lidando com eles, mas com seu shell (normalmente bash ) antes de lançar ln ou qualquer outro comando.