Não, porque xargs não pode substituir algo antes do shell chamar xargs com $(…) já avaliado. Isso se deve à ordem da expansão do shell .
Eu provavelmente faria assim:
find . -type f -name '*:2f*' -exec bash -c 'mv -- "$0" "${0//:2f/-}"' {} \;
Aqui, a chamada do shell é avaliada em todos os arquivos encontrados por find , e a substituição da string é feita com recursos de shell em vez de outra chamada para sed .
Além disso, essa abordagem é mais segura porque os espaços em nomes de arquivos são manipulados adequadamente (por meio da duplicação dos argumentos para a chamada mv ). Mais sobre isso aqui .
Para essas tarefas, você provavelmente precisará de uma ferramenta mais eficiente, como zmv , disponível em Zsh, ou o Perl rename , que é empacotado com muitas distribuições Linux:
rename 's/:2f/-/' *