Pode-se esperar que
convert in.jpg -resize "448x336!" out.jpg
não tocaria no arquivo se o tamanho já estiver correto?
Não é claro - mas pensando na forma como o formato da linha de comando da imagemagic funciona, isso não é surpreendente.
Portanto, as dimensões da imagem de cada arquivo precisam ser verificadas primeiro.
Agora, queremos usar o ImageMagic, que possui o comando identify para esse propósito;
identify -format "%wx%h\n" file.jpg
mostra apenas o tamanho em WxH format, como 448x336 .
Queremos redimensionar se o tamanho não for 448x336 . Nesse caso, usamos convert para redimensionar para 448x336 - precisamos informar convert que queremos redimensionar mesmo que isso signifique alterar a proporção para forçar a imagem para as novas dimensões - fazemos isso adicionando um ! como uma opção / sinalizador na especificação de tamanho:
convert in.jpg -resize "448x336!" out.jpg
faz o redimensionamento de que precisamos. Mas nós não temos um nome de arquivo fixo para a saída. Vamos pegar o nome original e inserir -res antes do .jpg , como in-res.jpg :
convert in.jpg -resize "448x336!" -set filename:path "%d/%t-res.%e" "%[filename:path]"
Nós usamos o comando find para percorrer os diretórios para ' .jpg' images - or " .JPG".
A parte identify é executada em um shell para usar o comando test , [ ... ] .
Eu também uso um shell para o comando convert , que é executado se a primeira ação -exec (não a opção) for bem-sucedida. Neste caso, é apenas para executar um segundo comando depois de redimensionar, mostrando uma mensagem para cada arquivo redimensionado.
find . -type f -iname "*.jpg" -exec bash -c \
'[ $(identify -format "%wx%h\n" "{}") != 448x336 ]' \; -exec bash -c \
'convert "{}" -resize "448x336!" -set filename:path "%d/%t-res.%e" \
"%[filename:path]" ; echo "Resized {}"' \;
Em vez do segundo bash , pode-se usar -exec convert ... simples e adicionar uma nova ação, como -print ou -ls , para mostrar os nomes dos arquivos redimensionados.
O comando é uma linha tecnicamente (mostrada com linhas de continuação para evitar a rolagem).
E, após essa explicação, de alguma forma eu sinto que a linha ainda não é fácil de ler ...