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 ols
ainda é 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 {} +