One way to phrase it is "Do you know how quoting works?" If the shell sees an argument like "*.zip*" (the quotes are mine, not part of the argument), then:
1) If expanding *.zip* finds one or more files, the shell changes the argument into a series of arguments which are the names of the files. 2) If expanding it does *not* find any files, the shell leaves it unchanged. (There is a shell option to cause it to stop with an error in this circumstance, but the default of the option is off.) In either case, the resulting arguments are handed to the program. Thus, when you say "ls *.c" what is really executed is "ls foo.c bar.c baz.c", if there are three .c files. But if there are *no* .c files, what is executed is "ls *.c", and ls then says "There is no file named '*.c'." (ls doesn't actually understand wildcards, it looks for exactly that file name and doesn't find a file with that name.) The way to avoid this is to put '...' around your wildcards when you want them passed just that way to the program in question. Which is what you almost always want to do with the -name predicate in find. Dale