1
resposta

[Dúvida] Por que meu Script de Exclusão entra em um Loop de Recursão?

Criei um script de exclusão de todos os arquivos .png tendo como base o script de conversão em diretórios diferentes da aula três, porém ele acaba entrando em uma recursão infinita até que chega no limite permitido pelo Linux que seria 1000.

Minha dúvida é: por que essa recursão ocorre no meu script e não no script de conversão?

Segue o script abaixo:

#!/bin/bash

deletar_arquivo(){
    caminho_imagem=$1
    local arquivo_sem_extensao=$(ls $caminho_imagem | awk -F. '{print $1}')
    if [ -f $arquivo_sem_extensao.png ]
    then
        rm $arquivo_sem_extensao.png
    fi
}

varrer_diretorio(){
    echo "Abrindo diretório $1"
    cd $1
    for arquivo in *
    do
        local caminho_arquivo=$(find ~/Documentos/kurt/imagens-novos-livros -name $arquivo)
        if [ -d $caminho_arquivo ]
        then
            varrer_diretorio $caminho_arquivo
        else
            deletar_arquivo $caminho_arquivo
        fi
    done
}

varrer_diretorio ~/Documentos/kurt/imagens-novos-livros/ 2>log3.txt
if [ $? -eq 0 ]
then 
    echo "Exclusão bem sucedida!"
else
    echo "Houve um problema no processo..."
fi
1 resposta

Olá, Kurt! Eaí tudo ok?

Ao analisar seu código, identifiquei que o problema está na função varrer_diretorio(). Dentro dessa função, você está chamando a função varrer_diretorio() novamente, passando o caminho do diretório encontrado como parâmetro. No entanto, você não está verificando se o diretório encontrado é diferente do diretório atual, o que acaba gerando a recursão infinita.

Uma possível solução para evitar a recursão infinita é adicionar uma condição antes de chamar a função varrer_diretorio() novamente. Você pode verificar se o caminho do diretório encontrado é diferente do diretório atual, assim:

if [ -d $caminho_arquivo ] && [ "$caminho_arquivo" != "$(pwd)" ]
then
    varrer_diretorio $caminho_arquivo
else
    deletar_arquivo $caminho_arquivo
fi

Dessa forma, a função varrer_diretorio() será chamada apenas quando o diretório encontrado for diferente do diretório atual, evitando assim a recursão infinita.

Caso ainda tenha alguma dúvida, é só me perguntar!

Espero ter ajudado, abraços e bons estudos!