Eu vejo dois problemas óbvios no seu script. Primeiro, o ** é fornecido pela opção globstar , que não está ativada por padrão. Você provavelmente o ativou no seu shell interativo, mas também precisa fazer isso para o script.
Então, você não está realmente comparando $width , mas a string width . O $ é necessário em [ ] .
O último problema é que alguns dos arquivos que você está executando são corrompidos ou não imagens. Em qualquer caso, o comando identify falha neles, então $width está vazio. Uma solução simples seria testar se $width está vazio ( -z "$width" ) e comparar apenas se não for ( ! -z "$width" ):
Tente isso:
#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do
width=$(identify -format "%w" "${file}")
if [[ ! -z "$width" && "$width" -gt 800 ]]
then
echo "$file"
fi
done
exit 0;