Onde você usa:
sed -i 's C:\ /root/ g'
você está usando o s command com um caractere de espaço separando as diferentes partes do comando, o que é incomum, mas completamente válido. Quando você precede seu caractere separador com uma barra invertida, ele não é tratado como um separador, mas como parte do argumento em si.
O problema que você tem aqui é que a barra invertida em C:\ está escapando do espaço no meio, então s nunca encontra o fim da substituição (que agora é g ) e reclama que o comando está inacabado como você viu.
No mínimo, você precisa escapar da própria barra invertida com outra barra invertida:
sed -i 's C:\ /root/ g'
Isso funcionará, embora a substituição dos espaços por outro caractere possa ser mais clara.
Quanto ao uso de xargs e subdiretórios - xargs não é necessário aqui, e O find pode fazer isso, incluindo o manuseio de arquivos em subdiretórios, por conta própria. Use:
find ../ \( -name "*.xml" -o -name "*.conf" \) -exec sed -i -e 's|C:\|/root/|g' '{}' +
para ter find executando o comando sed com todos os nomes de arquivos encontrados. Os nomes dos arquivos são inseridos no lugar de {} e + significa find minimizará o número de vezes que ele executa o comando.
-execdir pode ser melhor que -exec por certos motivos de segurança descritos na find man page ; é uma extensão não padrão, mas como você parece estar usando ferramentas GNU, ela deve estar lá para você, se você precisar.