O problema é que a sub-shell $(...)
em seu comando é avaliada no momento em que você executa o comando e não é avaliada por xargs
para cada arquivo.
Você pode usar find
-exec
para avaliar os comandos de cada arquivo em sh
e também substituir as citações apropriadamente:
find . -name "*[a-z][A-Z]*" -type f -exec sh -c 'echo mv -v "{}" "$(echo "{}" | sed -E "s/([a-z])([A-Z])/ /g")"' \;
Se a saída estiver boa, elimine o echo
in echo mv
.
Observe que, devido a echo | sed
, isso não funcionará com nomes de arquivos com \n
incorporado. (Mas essa foi uma limitação já existente em sua própria tentativa, então espero que seja aceitável.)