Redimensiona a imagem em um script usando o Imagemagick

2

Gostaria de criar um script bash para redimensionar imagens até 800px mantendo a proporção ...

Meu código não funciona no bash, mas funciona usando identify com uma única imagem:

#!/bin/bash
for file in ./**/public/uploads/*.*; do
  width = $(identify -format "%w" ${file})
  if [ width > 800 ]
  then
    echo $file // resize image
  fi
done
exit 0;

Problema: recebo Permission denied na linha 3

Eu tentei a solução dada em uma das respostas abaixo:

#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do 
  width=$(identify -format "%w" "${file}")
  if [ "$width" -gt 800 ]
  then
    echo "$file"
  fi
done
exit 0;

E agora recebo esta mensagem de erro:

identify.im6: Image corrupted   ./folder/public/uploads/ffe92053ca8c61835aa5bc47371fd3e4.jpg @ error/gif.c/PingGIFImage/952.
./images.sh: line 6: width: command not   found
./images.sh: line 7: [integer expression expected
    
por tonymx227 27.07.2016 / 16:32

2 respostas

2

Eu vejo dois problemas óbvios no seu script. Primeiro, o ** é fornecido pela opção globstar , que não está ativada por padrão. Você provavelmente o ativou no seu shell interativo, mas também precisa fazer isso para o script.

Então, você não está realmente comparando $width , mas a string width . O $ é necessário em [ ] .

O último problema é que alguns dos arquivos que você está executando são corrompidos ou não imagens. Em qualquer caso, o comando identify falha neles, então $width está vazio. Uma solução simples seria testar se $width está vazio ( -z "$width" ) e comparar apenas se não for ( ! -z "$width" ):

Tente isso:

#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do 
  width=$(identify -format "%w" "${file}")
  if [[ ! -z "$width" && "$width" -gt 800 ]]
  then
    echo "$file"
  fi
done
exit 0;
    
por 27.07.2016 / 16:35
1

O problema (ou, pelo menos, um dos problemas) é que você está dizendo

width = $(identify -format "%w" "${file}")

Você precisa eliminar os espaços antes e depois do = , assim:

width=$(identify -format "%w" "${file}")
    
por 27.07.2016 / 16:43