Você pode usar -exec bash -c 'your code here using $0'
No seu caso, este
find */* -exec bash -c 'mv "$0" "${0%/*}/foo.${0##*.}"' {} \;
é o mesmo que o seu para.
for f in */*; do mv "$f" "${f%/*}/foo.${f##*.}"; done
Dica 1: Você também pode usar -exec sh -c '.....'
caso não esteja usando o bash
Dica 2: você pode combinar mais de um -exec
na mesma localização:
find ./* -type f -exec echo {} \; -exec cat {} \;
Dica 3: Para construções simples, esta sintaxe é válida:
find . -type f ! -name "*.txt" -exec mv -v '{}' '{}'.txt \;
Dica 4: Em vez de -exec
, você pode usar -ok
, que solicita a confirmação do usuário antes de executar o comando (útil para testes)
Acima funciona ok em GNU find
(eu tenho a versão 4.6.0), mas não tenho certeza se todas essas dicas funcionam em outras find
implementações.