Quando você usa *
sem aspas (ou sem escape), ou seja, token glob *
(qualquer número de caracteres, ou seja, qualquer arquivo), o shell expande *
para todos os arquivos no diretório fornecido, no caso de *c
, todos os arquivos terminados em c
. Então, quando você corre:
find / -name *c
assumindo que haja três arquivos .c
no diretório atual, ou seja, foo.c
, bar.c
e spam.c
, o comando que realmente seria executado é:
find / -name foo.c bar.c spam.c
que é um comando inválido, como você pode ver, ele está usando vários nomes de arquivos após a única opção -name
. Isso é o que acontece quando você está em /
.
Agora, em /home
, presumivelmente não havia arquivos *c
presentes, portanto, o padrão de glob *c
será mantido (em bash
, isso é comportamento dependente de shell; em bash
, você pode altere o comportamento padrão por nullglob
/ failglob
shell options), então o comando find
gets é:
find / -name *c
que é um comando válido e, espera-se, será executado.
Agora, com find
, você deve citar ou escapar de qualquer token de globalização de concha, já que você quer que find
interprete (expanda) esses, não antes pelo shell. Então faça qualquer um de:
find / -name '*c'
find / -name "*c"
find / -name \*c