Tag: wildcards

  • Linux Tutorial Series – 56 – Shell globbing (aka wildcards)

    Here is the video version, if you prefer it:

    Today we are going to talk about shell globbing (sometimes referred to as wildcards). They both refer to the same thing (“Globbing vs wildcards,” n.d.)⁠, so I will use the names interchangeably, or just stick to wildcards since it is shorter.

    Wildcards enable us to specify a set of file names using a shorthand. (Barrett, 2016)⁠ Let’s look at an example. Say I had these files:

    mislav@mislavovo-racunalo:~/Linux_folder$ ls

    aba.txt ab.txt a.txt cb.txt file.txt

    Good. And let’s say I wanted to print out the contents of all the files whose filenames start with a. I could do so the tedious way as follows:

    mislav@mislavovo-racunalo:~/Linux_folder$ cat a.txt

    mislav@mislavovo-racunalo:~/Linux_folder$ cat aba.txt

    mislav@mislavovo-racunalo:~/Linux_folder$ cat ab.txt

    The more efficient way of doing this is to write the equivalent of the 3 above statements, which is:

    mislav@mislavovo-racunalo:~/Linux_folder$ cat a*.txt

    What did I just do here? Am I a magician? Well, not really, so let’s look at what happened.

    As I stated above, wildcards enable us to specify a set of file names using a shorthand. With this particular wildcard (a*.txt), I am saying: “Give me all the filenames that start with a, have zero or more consecutive characters afterwards, and end with a .txt”. So in some intermediary step, my command looks like:

    mislav@mislavovo-racunalo:~/Linux_folder$ cat aba.txt ab.txt a.txt

    Now here is something important – the shell does all of this expansion (this is how it is called – turning a*.txt to all of the filenames) before it executes the cat command. So, the expansion of the wildcard is done before the command runs. (Ward, 2014)⁠

    Here is a list of wildcards and their meanings; the wildcard and its meaning is delimited with a dash (Barrett, 2016)⁠:

    • * – zero or more consecutive characters
    • ? – any single character
    • [set] – any single character in the given set; [abcde] matches characters a, b, c, d and e, while [a-z] matches all lowercase characters from a to z
    • [^set] or [!set] – anything not in the set (both [^set] and [!set] have equivalent meaning); i.e. [^1] is anything but the digit 1

    There are also some specifics:

    • If you want to include a literal dash in the set, put it first or last
    • To include a literal closing square bracket in the set, put it first
    • To include the ^ or the ! symbol literally, don’t put it first

    Thank you for reading and hope you learned something useful!

    References

    Barrett, D. J. (2016). Linux pocket guide (3rd ed.). O’Reilly Media. Pages 28-30

    Globbing vs wildcards. (n.d.). Retrieved January 11, 2020, from https://unix.stackexchange.com/questions/413357/globbing-vs-wildcards

    Ward, B. (2014). How Linux Works: What Every Superuser Should Know (2nd ed.). No Starch Press. Page 17