O erro está chegando porque o bash está tentando expandir o * em seu argumento para ls usando a correspondência de padrões glob. Será sempre através de tal erro quando a glob não corresponder ao padrão. O * , em seguida, é passado para ls como um asterisco real, que não corresponde a um arquivo, portanto ls resultará em erro!
Existem vários bits sobre o que você está fazendo que são redundantes. Eu sei que você está tentando aprender um constructo, mas vamos dividir alguns dos pedaços do que você acabou de realizar e como isso poderia ter sido feito.
-
ls /usr/biné suficiente para listar arquivos no diretório bin, você não precisa da estrela. - Você nunca deve analisar a saída de
ls, é ambíguo e potencialmente perigoso. - Você pode obter o mesmo efeito sem o grep fazendo
ls /usr/bin/*zip*, mas olsainda é redundante, você pode simplesmente passar o expantion glob para o arquivo:file /usr/bin/*zip*
Por fim, find geralmente é uma ferramenta melhor para localizar arquivos. Você poderia fazer o que você está assim:
$ find /usr/bin -iname '*zip*' -exec file {} +