I am trying to find all files in the directories and sub-directories on Desktop with a file name starting with prac_ followed by two digits and ending in .c or .o

find ./Desktop -type f -name "prac_[0-9][0-9]*" \( -name "*.c" -o -name "*.o" \)

The problem I'm having is that the above command will bring up files like prac_99BLAHBLAH.o when I only want files with the format prac_99.c.

  • 1
    How about -name 'prac_[0-9][0-9].c' -o -name 'prac_[0-9][0-9].o' – Some programmer dude Jun 17 at 5:34

Using * in a filename globbing pattern matches any string whatsoever, so it's correct that the name prac_99BLAHBLAH.o matches the pattern prac_[0-9][0-9]*, and one of *.c or *.o.

Instead, use

find ./Desktop -type f -name 'prac_[0-9][0-9].[co]'

The filename globbing pattern [co] matches the single character c or o, so putting it at the end of the pattern used with -name enables you to find filenames that has either character at the end of the name.

| improve this answer | |

You're just not restricting the characters between the numbers and file extensions. It can all be a single regex:

find ./Desktop -type f -regex ".*/prac_[0-9][0-9][.][co]"
  • The .*/ at the beginning is because -regex matches on filepaths rather than just filenames.
  • The [.] is a single-character set that matches a period. It's used because a plain . matches any character. Escaping it like \. works too, but I tend to avoid that style because the syntax varies across programming languages (e.g., with an extra escape like \\. or in a raw string like r"\.").
| improve this answer | |
  • Is there a particular reason to place the period in [ ]? – AdminBee Jun 17 at 9:33
  • 1
    @AdminBee The period will match any character unless it is escaped like "\." or is a single-character set like "[.]". I prefer the latter because I jump between a lot of domain-specific config languages and tend to forget when "\." actually needs to be written as "\\." (or r"\." or with backticks, etc). – grencez Jun 17 at 10:17
  • 1
    I would recommend placing it in the answer, it is among others these little hints that make the site so useful ... – AdminBee Jun 17 at 10:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy