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/-/' *