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