Isso pode ser feito diretamente de find usando -exec :
find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;
O que é transmitido para -exec será chamado uma vez por arquivo encontrado com os parâmetros de modelo {} sendo substituído pelo nome do arquivo atual. O \; no final do comando find termina a linha.
O uso de xargs não é realmente necessário neste caso, porque precisamos invocar xmllint uma vez por arquivo, pois os nomes dos arquivos de entrada e saída devem ser especificados dentro da mesma chamada.
xargs seria necessário se o comando que estava sendo enviado do find estivesse trabalhando em vários arquivos por vez e essa lista fosse longa. Você não pode fazer isso nesse caso, já que precisa passar o nome de arquivo único para a opção --output de xmllint . Sem xargs você pode acabar com um erro "Argument List too long" se estiver processando muitos arquivos. xargs também suporta strings de substituição de arquivos com a opção -I :
find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'
Faria o mesmo que o comando find -exec acima. Se alguma das suas pastas tiver caracteres estranhos em espaços semelhantes, você precisará usar as opções -0 de find e xargs . Mas usar xargs com -I implica na opção -L 1 , que significa processar apenas um arquivo de cada vez, portanto, você também pode usar diretamente find com -exec .