Eu criei um pequeno script bash para dividir automaticamente meus dois monitores com o imagemagick quando faço uma captura de tela.
#! /bin/bash
convert "$1" -crop 1024x600+0+0 +repage "${1//.png/}-left.png"
convert "$1" -crop 1280x1024+1024+0 +repage "${1//.png/}-right.png"
Isso funciona muito bem, mas só o renomeará corretamente se for um png (o que neste caso não é um problema). Existe alguma maneira de fazê-lo funcionar para mover a extensão do arquivo para o final? Então, se eu chamasse esse script (vamos chamá-lo de splitimage) em um arquivo, oldscreenshot.jpg
ele me daria oldscreenshot-left.jpg
e oldscreenshot-right.jpg
?
Responder1
Sim, usando as expansões ${param##word}
e ${param%word}
. O primeiro vai se livrar da extensão, o último vai se livrar de tudomasa extensão
#! /bin/bash
convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"
convert "$1" -crop 1280x1024+1024+0 +repage "${1%.*}-right.${1##*.}"
Exemplo
$ var=foo.jpg; echo "No extention: ${var%.*} | Extention only: ${var##*.}"
No extention: foo | Extention only: jpg
Responder2
Sim. Mas use stripping em seuexpansão de parâmetros(nãoexpansão de chave, isso é algo completamente diferente) em vez de substituição.
convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"