2
respostas

[Sugestão] Versão alternativa 100% funcional e um mistério intrigante!

Juntei os ensinamentos do mestre Rafael Nercessian com algumas pesquisas e outros achados dos colegas aqui no Forum e saiu essa versão que funcionou 100%.

Apesar de funcionar, fiquei intrigado com algo!

#!/bin/bash

varrer_diretorio() {
  cd $1
  for arquivo in *
  do
    local caminho_arquivo="$PWD"/"$arquivo"
    if [ -d "$caminho_arquivo" ]; then
      varrer_diretorio "$caminho_arquivo"
      cd ..
    else
      convert "$caminho_arquivo" "${caminho_arquivo/.jpg/.png}"
    fi

  done

}

varrer_diretorio /app/imagens-pastas-livros

Quebrei muito a cabeça e depois de muitas tentativas meti um cd .. após a chamada da função varrer_diretorio, e finalmente funcionou.

Mas depois de muitas tentativas e comparações com o códgio do mestre, não consegui uma solução sem usar o cd .. e fiquei intrigado do porquê que o dele funciona sem o cd ..

Alguém aceita o desafio de desvendar?

Abaixo o código do mestre (alterei apenas a pasta raiz).

#!/bin/bash

converte_imagem(){
    local caminho_imagem=$1
    local imagem_sem_extensao=$(ls $caminho_imagem | awk -F. '{ print $1 }')
    convert $imagem_sem_extensao.jpg $imagem_sem_extensao.png
}

varrer_diretorio(){
    cd $1
    for arquivo in *
    do
        local caminho_arquivo=$(find /app/imagens-pastas-livros -name $arquivo)
        if [ -d $caminho_arquivo ]
        then
            varrer_diretorio $caminho_arquivo
        else
            converte_imagem $caminho_arquivo
        fi
    done
}

varrer_diretorio /app/imagens-pastas-livros
2 respostas

Obs 1 - A questão não é o fato de eu ter preferido usar

local caminho_arquivo="$PWD"/"$arquivo"

em vez de

local caminho_arquivo=$(find /app/imagens-pastas-livros -name $arquivo)

porque eu testei as opções e os resutados foram idênticos.

Olá Diego, tudo bem?

Parabéns pela alternativa encontrada!

Interessante ver a sua alternativa na forma como são tratados os caminhos dos arquivos. No código do instrutor, é utilizado o comando ls para obter o caminho do arquivo e, em seguida, o comando awk para remover a extensão .jpg. Já no seu, é utilizado o caminho completo do arquivo, concatenando o diretório atual $PWD com o nome do arquivo.

Além disso, na sua versão, há um comando cd .. para voltar ao diretório anterior quando um diretório é encontrado durante a varredura. Isso garante que a varredura continue no diretório correto após a conclusão da varredura do subdiretório, fato que tornou mais simples e direto a forma como trata os caminhos dos arquivos e garante a continuidade da varredura no diretório correto após a conclusão da varredura do subdiretório.

Lembrando que caso você fique com alguma dúvida ou dificuldade para realizar os exercícios, conte conosco! Estamos aqui para ajudar.

Parabéns pelo empenho! Abraços e bons estudos 😄