find con una variable en exec


20200417


De comentario realizado en telegram se tiene un escenario para buscar archivos y convertirlos de formato

for i in $(find . -name *.nef) 
  do 
    convert $i $i.jpg; 
  done


Con el comando find se puede ejecutar directamente un comando

find . -name ".nef" -exec convert {} {}.jpg \;


Sin embargo esto genera archivos .net.jpg


Para evitar eso se usa la expresión ${elNom%.*} para eliminar la extensión original. Pero resulta que find no puede interpretar directamente las variables de ambiente.


Por lo que es necesario ejecutar find con un llamado a un subshell

find . -name "*.nef" -exec bash -c 'elNom={}; convert $elNom ${elNom%.*}.jpg' \;


Lo que realiza es al encontrar archivos .nef ejecuta un bash y dentro del shell asigna el archivo encontrado a la variable elNom, luego esa variable se emplea en el convert como nombre original y el segundo quita la extensión y agrega .jpg



Anterior: petrohs:tekini