Como usar o comando convert com bash para redimensionar todas as imagens em um determinado diretório?

1

Desejo redimensionar todos os arquivos PNG em ~/somefolder/ cujos nomes de arquivos NÃO são iniciados com tn_ a 50% do tamanho original e renomear o arquivo de saída com um tn_ como prefixo e seu nome original. Eu sei que há um comando de conversão e já o instalei. Eu acho que isso pode ser feito através de bash e um pouco de mágica, mas eu sou muito novo no Unix. Eu estou usando o Mac OSX.

O que devo fazer?

    
por AGamePlayer 30.03.2015 / 06:17

1 resposta

3

Aqui está uma maneira (coloque-a em um arquivo e execute-a com qualquer shell POSIX como bash ou ksh ):

cd ~/somefolder/ || exit 1
for f in *.png
do
  case $f in
  (tn_*) continue ;;
  (*) convert "${f}" -resize 50%x50% "tn_${f}" ;;
  esac
done

Com os shells modernos, o case construct também pode ser substituído por um comando condicional terser:

cd ~/somefolder/ || exit 1
for f in *.png
do
    [[ "$f" != tn_* ]] && convert "${f}" -resize 50%x50% "tn_${f}"
done

(Mas esse código é da memória e não foi testado, portanto inspecione o comando convert sobre a sintaxe real de redimensionamento e tente primeiro em alguns diretórios de amostra em alguns arquivos de amostra.)

    
por 30.03.2015 / 06:48