43

I wanted to delete all the files from a directory except one. I found my solution here. This solution is using this command:

shopt -s extglob

I want to know what this command exactly does, some back end knowledge.

1 Answer 1

42

In simple terms, globbing refers to pattern matching. Bash uses simple globbing like, echo l* which expand to list of files in current directory that start with letter l. Of course , as you can guess, it's simple and limited.

Enter extglob. As you can guess, it stands for extended globbing. This option allows for more advanced pattern matching. From man bash:

extglob If set, the extended pattern matching features described
        above under Pathname Expansion are enabled.

And a little before that:

If the extglob shell option is enabled using the shopt builtin, several
extended pattern matching operators are recognized.  In  the  following
description, a pattern-list is a list of one or more patterns separated
by a |.  Composite patterns may be formed using  one  or  more  of  the
following sub-patterns:

      ?(pattern-list)
             Matches zero or one occurrence of the given patterns
      *(pattern-list)
             Matches zero or more occurrences of the given patterns
      +(pattern-list)
             Matches one or more occurrences of the given patterns
      @(pattern-list)
             Matches one of the given patterns
      !(pattern-list)
             Matches anything except one of the given patterns

There's multitude of ways in which extglob can be used. Quite a few good examples are provided in Linux Journal and Greg's wiki.

3
  • Is this a permanent change? Is there a way to turn it off after I am done?
    – GC_
    Sep 16, 2020 at 16:25
  • 1
    Right after I commented, I found shopt -u extglob to unset it. I still wonder how long it lasts.
    – GC_
    Sep 16, 2020 at 16:28
  • 2
    If you want it permanent you need to add it into your ~/.bash_profile (or ~/.bashrc). The set option should be reset when closing the terminal or exiting the shell. Sep 16, 2020 at 19:19

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .