3
respostas

Erro - Aula 3 - Tópico 4

Boa noite. Ao executar o escript estou recebendo as críticas abaixo:

conversao_novos_livros.sh: line 14: [: too many arguments

conversao_novos_livros.sh: line 14: [: too many arguments

conversao_novos_livros.sh: line 14: [: too many arguments

conversao_novos_livros.sh: line 14: [: too many arguments

(...)

Conversão realizada com sucesso

O código está igual ao utilizado pelo professor:

#!/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 ~/Downloads/imagens-novos-livros -name $arquivo)
        if [ -d $caminho_arquivo ]
        then
            varrer_diretorio $caminho_arquivo
        else
            converte_imagem $caminho_arquivo
        fi
    done
}

varrer_diretorio ~/Downloads/imagens-novos-livros
if [ $? -eq 0 ]
then
    echo "Conversão realizada com sucesso"
else
    echo "Houve um problema na conversão"
fi

Alguém sabe o que pode ser?

Obrigado.

3 respostas

Olá Erick, tudo bem?

Uma dúvida, você teria mais arquivos dentro desse diretório? Uma sugestão, na linha 14 do código

if [ -d $caminho_arquivo ]

Tente envolver a variável caminho_arquivo por aspas duplas forçando assim a ser um string, um argumento, ficando dessa forma:

if [ -d "$caminho_arquivo" ]

Abs

Olá Rafael, boa noite.

Estou bem, obrigado. :)

Sim, coloquei uma série de arquivos .JPG nos diretórios para ver se o script estava rodando bem.

Funcionou!

Poderia me explicar mais detalhadamente do por que no seu exemplo não ter aspas e eu ter que colocar no meu código para rolar?

Muito obrigado.

Olá Erick,

Legal saber que funcionou, no caso quando temos uma grande quantidade de arquivos com espaços em branco, pode acontecer esse problema de ficarmos com mais argumentos do que o shell consegue lidar. Nesse caso, ao envolvermos a variável com aspas duplas nós estamos "forçando" a saída para termos um argumento, no caso, uma string.

No exemplo, como não tinhamos uma grande quantidade de arquivos, o uso das aspas duplas ou não seria opcional, o resultado seria o mesmo, mas a partir do momento que temos mais quantidade de arquivo com espaços em branco, o shell pode não conseguir processar a informação informando que temos muitos argumentos para serem processados. Nesses casos, somos obrigados a usar as aspas duplas para forçar a saída dos dados interpretados como sendo de um argumento, uma string.

Abs