¿Cómo usar el comando convertir en masa, un barrido limpio de expresión regular?

Tengo un montón de imágenes que parecen PHO_123456_12345678.jpg y quiero generar nuevas imágenes llamadas THUMB90_123456_12345678.jpg, este es el comando que quiero usar, excepto que no sé cómo hacerlo a granel.

convert SRC.JPG      -resize 90x90^ \ -gravity center -extent 90x90  DST.JPG

¿Hay alguna forma de hacerlo con expresiones regulares o tiene que ser un script de shell?

preguntado el 30 de enero de 12 a las 20:01

2 Respuestas

Veamos ... creo que esto debería funcionar:

ls *.jpg | sed -i -e "s~^PHO_~~" | xargs -n1 -i convert PHO_{} -resize 90x90^ \ -gravity center -extent 90x90 THUMB90_{}

Respondido el 31 de enero de 12 a las 00:01

Lo siento, acabo de recibir un: sed: no hay archivos de entrada - Adam Skiba

Um, creo que tal vez deberías eliminar la opción '-i' en sed. - Stephen Gross

Genial, eso funciona (también tuve que quitar mi \ de allí), ¡pero gracias! - Adam Skiba

@StephenGross Nunca deberías analizar la salida de ls, solo está destinado a ser visto en la pantalla, no se usa para otros comandos, ya que se romperá de maneras magníficas cuando menos lo espere (los archivos con espacios son comunes). La construcción de bucle for con globbing, aunque es más larga, es la forma correcta de hacer esto - SiegeX

@SiegeX Normalmente trabajo en Unix, en cuyo caso tú generalmente puede asumir que los nombres de archivo no tienen espacios. Sin embargo, tienes razón, los espacios arruinarán esa lógica. Aparte del problema de los espacios, ¿qué no funcionará en mi respuesta? - Stephen Gross

Tendría que ser una combinación de una expresión regular [dentro] de un script de shell.

IMGPREFIX='PHO'
THUMBPREFIX='THUMB90'

for filename in $IMGPREFIX_*.jpg ; do
  thumbfilename=$(echo $filename | sed 's/$IMGPREFIX_\(.*\)\.jpg/$THUMBPREFIX_\1\.jpg/')
  convert $filename -resize 90x90^ \ -gravity center -extent 90x90  $thumbfilename
done

Respondido el 31 de enero de 12 a las 00:01

Con esto, el script parece estar haciendo algo, pero no está creando ningún archivo :( - Adam Skiba

@AdamSkiba, actualicé mi respuesta anterior. La expresión regular está simplificada. El problema era que estaba usando comillas simples en lugar de comillas dobles para rodear la expresión regular. Debería funcionar para ti ahora. No estoy familiarizado con el convert comando, y solo estoy usando el formato que proporcionó en su pregunta. - Usuario web

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.