Você deixou seus blocos if...fi
confusos. Aqui está a estrutura atual do seu script:
if [ -f "$pngdir/$pngname" ] && [ -s "$pngdir/$pngname" ]
then
elif [ -f "$pngtemp/$pngname" ]
then
if [ -s "$pngtemp/$pngname" ]
then
fi
elif [ $pngage -gt $pngthreshold ]
then
if [ -n "$pngarchivefile" ]
then
else
fi
else
fi
fi
Como você pode ver, você tem um fi
extra. Se você não está recebendo um erro de sintaxe, então o% final fi
está terminando algo da parte anterior do seu script, o que, portanto, provavelmente não está fazendo o que você pensa que é.
Em uma nota separada, [ -f $pngname ]
verifica se o destino é um arquivo normal. Se você quer apenas verificar se ele existe e tem certeza de que, se isso acontecer, certamente será um arquivo e não um diretório ou qualquer outra coisa, você pode pular o -f
e usar apenas -s
diretamente. [ -s file ]
retornará false se o arquivo não existir.
Eu não posso dizer exatamente por que seu script está falhando, já que você não está mostrando o restante do script. Se você editar sua pergunta e fornecer um exemplo mínimo de trabalho que reproduza o erro, posso atualizar essa resposta. Outra possibilidade é que seu arquivo de destino seja, na verdade, um link; nesse caso, o [ -f file ]
falhará. Se você também precisar trabalhar para links, substitua os [ -f file ]
tests por [ -e file ]
.