#!/bin/bash
#################################################################################
# Nome: converte-jpg-png
#
# Descrição: Script que converte todos os arquivos .jpg de um diretório para .png
# e vice-versa.
#
# Autor: Naygno B. Noia
#################################################################################
while true; do
echo "=== Conversor jpg <-> png ==="
echo "Opções:"
echo "1) Converter .jpg -> .png"
echo "2) Converter .png -> .jpg"
echo "3) Sair"
echo "============================"
read -p "Escolha uma opção [1-3]: " opcao
case "$opcao" in
'1' )
read -p "Indique o diretório dos arquivos .jpg: " diretorio
if [[ -d "$diretorio" ]]; then # Verifica se o diretório existe.
ls "$diretorio"/*.jpg > /dev/null 2>&1 # Evita que o comando ls polua a tela com conteúdo desnecessário.
# O 2 representa o stderr, o >&1 redireciona as saídas de 2 para o mesmo local de 1.
valor=$? # Guarda o resultado da execução do ls: 0 indica que existe algum arquivo .jpg no diretório indicado, caso contrário indica que não há nada correspondente no diretório.
if [[ "$valor" -eq 0 ]]; then # Verifica se há algum arquivo no formato .jpg no diretório indicado
for arquivo in "$diretorio"/*.jpg; do # Percorre o conteúdo do diretório buscando por pelo menos um arquivo no formato jpg.
convert "$arquivo" "${arquivo%.jpg}".png # Converte os arquivos encontrados para o formato png.
retorno=$?
case $retorno in
'127' ) # O valor 127 indica que o ImageMagick não está instalado no sistema.
echo "Não foi possível realizar a conversão. Instale o ImageMagick no seu sistema."
echo "Execute o comando: sudo apt update && sudo apt install imagemagick"
echo "E em seguida retorne a este script"
exit 1
;;
'0' ) # Erro 0 indica que o ImageMagick está instalado.
continue
;;
*) # Aqui é quando o erro é diferente de 0 e 127. A causa do erro pode ser problemas com os arquivos ou as permissões de escrita.
echo "Ocorreu um erro durante a conversão. Verifique o arquivo ou permissões."
break
esac
done # A instrução: "${arquivo%.jpg}".png
# substitui o sufixo .jpg por .png com o objetivo de evitar nomes como exemplo.jpg.png.
ls "$diretorio"/*.png > /dev/null 2>&1
valor=$?
if [[ "$valor" -eq 0 ]]; then # Verifica se há algum arquivo convertido para o formato desejado.
echo "Operação de conversão realizada com sucesso."
else
echo "Nenhum arquivo convertido."
fi
else
echo "Não há arquivos .jpg no diretório indicado."
fi
else
echo "Diretório inexistente."
continue
fi
;;
'2')
read -p "Indique o diretório dos arquivos .png: " diretorio
if [[ -d "$diretorio" ]]; then # Verifica se o diretório existe.
ls "$diretorio"/*.png > /dev/null 2>&1 # Evita que o comando ls polua a tela com conteúdo desnecessário.
valor=$? # Guarda o resultado da execução do ls: 0 indica que existe algum arquivo .png no diretório indicado, caso contrário indica que não há nada correspondente no diretório.
if [[ "$valor" -eq 0 ]]; then # Verifica se há algum arquivo no formato .png no diretório indicado
for arquivo in "$diretorio"/*.png; do # Percorre o conteúdo do diretório buscando por pelo menos um arquivo no formato png.
convert "$arquivo" "${arquivo%.png}".jpg # Converte os arquivos encontrados para o formato jpg.
retorno=$?
case $retorno in
'127' )
echo "Não foi possível realizar a conversão. Instale o ImageMagick no seu sistema."
echo "Execute o comando: sudo apt update && sudo apt install imagemagick"
echo "E em seguida retorne a este script"
exit 1
;;
'0' )
continue
;;
*)
echo "Ocorreu um erro durante a conversão. Verifique o arquivo ou permissões."
break
esac
done # A instrução: "${arquivo%.jpg}".png
# A instrução: "${arquivo%.png}".jpg
# substitui o sufixo .png por .jpg com o objetivo de evitar nomes como exemplo.jpg.png.
ls "$diretorio"/*.jpg > /dev/null 2>&1
valor=$?
if [[ "$valor" -eq 0 ]]; then # Verifica se há algum arquivo convertido para o formato desejado.
echo "Operação de conversão realizada com sucesso."
else
echo "Nenhum arquivo convertido."
fi
else
echo "Não há arquivos .png no diretório indicado."
fi
else
echo "Diretório inexistente."
continue
fi
;;
'3')
echo "Encerrando o script..."
break
;;
*)
echo "Valor inválido. Tente um valor válido no menu de opções."
;;
esac
done