Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Mão na massa

#!/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

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
4 respostas

A lógica pare adequada, mas sempre que eu tento converter algum arquivo no diretório /home/naygno/ retorna essa saída:

naygno@ubuntu:~$ ./converte-jpg-png
=== Conversor jpg <-> png ===
Opções:
1) Converter .jpg -> .png
2) Converter .png -> .jpg
3) Sair
============================
Escolha uma opção [1-3]: 2
Indique o diretório dos arquivos .png: /home/naygno
Nenhum arquivo convertido.
=== Conversor jpg <-> png ===
Opções:
1) Converter .jpg -> .png
2) Converter .png -> .jpg
3) Sair
============================
Escolha uma opção [1-3]: 3
Encerrando o script...

Mesmo depois de fazer a seguinte alteração:
ls "$diretorio"/*.jpg > /dev/null 2>&1

Problema corrigido. Adicionei alguns tratamentos de erros.

solução!

Oii, Naygno!

Que bom que você conseguiu resolver o problema!

Parabéns por praticar.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá, Lorena!
Muito obrigado pelo seu feedback!