Creé un pequeño script bash para dividir automáticamente mis dos monitores con imagemagick cuando tomo una captura de pantalla.
#! /bin/bash
convert "$1" -crop 1024x600+0+0 +repage "${1//.png/}-left.png"
convert "$1" -crop 1280x1024+1024+0 +repage "${1//.png/}-right.png"
Esto funciona muy bien, pero solo le cambiará el nombre correctamente si es png (lo cual en este caso no es un problema). ¿Hay alguna forma de hacerlo funcionar para mover la extensión del archivo al final? Entonces, si llamo a este script (llamémoslo splitimage) en un archivo, oldscreenshot.jpg
me daría oldscreenshot-left.jpg
y oldscreenshot-right.jpg
?
Respuesta1
Sí, usando las expansiones ${param##word}
y ${param%word}
. El primero se deshará de la extensión, el último se deshará de todo.perola extensión
#! /bin/bash
convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"
convert "$1" -crop 1280x1024+1024+0 +repage "${1%.*}-right.${1##*.}"
Ejemplo
$ var=foo.jpg; echo "No extention: ${var%.*} | Extention only: ${var##*.}"
No extention: foo | Extention only: jpg
Respuesta2
Sí. Pero usa stripping en tuexpansión de parámetros(noexpansión de llaves, eso es algo completamente diferente) en lugar de reemplazo.
convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"