How to search filenames by regex with “find”

find /home/test -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' -mtime +3
  1. -name uses globular expressions,
    aka wildcards. What you want is
    -regex
  2. To use intervals as you intend, you
    need to tell find to use Extended
    Regular Expressions
    via the
    -regextype posix-extended flag
  3. You need to escape out the periods
    because in regex a period has the
    special meaning of any single
    character
    . What you want is a
    literal period denoted by \.
  4. To match only those files that are
    greater than 3 days old, you need to prefix your number with a + as
    in -mtime +3.

Proof of Concept

$ find . -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip'
./test.log.1234-12-12.zip

Leave a Comment