Preparation
$ mkdir globbing
$ cd globbing
$ mkdir -p folder/{sub,another}folder/content/deepfolder/
touch macy stacy tracy "file with space" folder/{sub,another}folder/content/deepfolder/file .hiddenfile
$ shopt -u nullglob
$ shopt -u failglob
$ shopt -u dotglob
$ shopt -u nocaseglob
$ shopt -u extglob
$ shopt -u globstar
If there is a need to match specific characters then '[]' can be used. Any character inside '[]' will be matched exactly once.
$ echo [m]acy
macy
$ echo [st][tr]acy
stacy tracy
The []
glob, however, is more versatile than just that. It also allows
for a negative match and even matching ranges of characters and
characterclasses. A negative match is achieved by using !
or ^
as the first
character following [
. We can match stacy
by
$ echo [!t][^r]acy
stacy
Here we are telling bash the we want to match only files which do not not
start with a t
and the second letter is not an r
and the file ends in
acy
.
Ranges can be matched by seperating a pair of characters with a hyphen (-
). Any
character that falls between those two enclosing characters - inclusive - will
be matched. E.g., [r-t]
is equivalent to [rst]
$ echo [r-t][r-t]acy
stacy tracy
Character classes can be matched by [:class:]
, e.g., in order to match files
that contain a whitespace
$ echo *[[:blank:]]*
file with space