Sustitución de variables bash en la salida de find a través de ejecutivo

¿Hay alguna forma de aplicar?bash sustitución variable enfind¿La salida? Sé que he visto a alguien hacerlo en el desbordamiento de pila, pero parece que ya no puedo encontrar esa publicación en particular.

Como ejemplo, digamos que quiero cambiar el nombre de los archivos*.png a*_copy.png. Sé que puedo hacer esto usandorename pero es solo un experimento mental.

Ahora me gustaría poder hacer algo como esto:

find . -name "*png" -exec mv "{}" "${{}%.*}_copy.png" \;

Lo que resulta en unsustitución inválida. Por supuesto, primero podría asignar la salida a una variable y luego aplicar la sustitución en un sub-shell, pero¿Es esta realmente la única forma?

find . -name "*.png" -exec bash -c 'var="{}";  mv "{}" "${var%.*}_copy.png"' \;

O¿Hay alguna manera de que esto se pueda lograr directamente desde{}?

Consenso

ComoEtan Reisner remarcado, una forma mejor y más segura de manejar el resultado de find sería pasarlo como argumento posicional.

find . -name "*.png" -exec bash -c 'mv "$0" "${0%.*}_copy.png"' "{}" \;

Respuestas a la pregunta(1)

Su respuesta a la pregunta