wildcard character `* ` can't match some string?

Files which begin with a dot are hidden from file listings by default. The easiest way to match those kind of files would be to put a dot in the beginning of the expression. However, this will onyl match files starting with ..

ls  -al  .*.swo

The alternative is to set the dotglob before running the command, then files starting with . will be included.

shopt -s dotglob

Add it to your ~/.bashrc to set it by default.

Note that setting dotglob can lead to uninteded results when using the bash shell, since both . (current directory) and .. (parent directory) will appear when using *. With dotglob set, never try to use rm -R *.


As an extension to Shaido's answer I'd like to give some explanation why the -a option will not work here:

The ls command does not process wildcards. The command line interpreter does this step:

If you type the command line "mycommand *.c" the command line interpreter will first replace the wildcard string "*.c" by the list of matching files and then execute the resulting command line:

mycommand a.c file.c test.c

The command line interpreter works the same way for all commands so it cannot know that -a means "including hidden files" in the case the ls command (while -a has a totally different meaning for other commands)...