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"' "{}" \;