In shell scripts, using the pattern .*
to match dot files (files with names starting with a dot) is considered harmful because it may include unexpected files in the match. This is because .*
matches any character zero or more times, including the /
character. As a result, the pattern will match hidden files and directories in the current directory and any subdirectories. (championshipmartialarts.com)
For example, consider the following directory structure:
.
└── dir
└── .hidden
If you use the pattern .*
to match files in the current directory, it will also match the hidden directory ./dir/.hidden
, which may lead to unexpected results.
A safer approach to match dot files is to use the pattern .[^/]*
. This pattern matches only files in the current directory that start with a dot, but not directories that contain dots in their name.
For example, the following command will match only the dot files in the current directory:
ls -d .[^/]*