≡ Menu

Find command: Exclude or Ignore Files (e.g. Ignore All Hidden .dot Files )

How do I ignore all hidden .dot files while searching for files using the find command? How do I ignore or exclude certain files while running Linux or UNIX find command?

The find command support standard UNIX regex to match, include or exclude files. You can write complex queries easily with regex while find command recursively descends the directory tree for each /file/to/path listed, evaluating an expression. The syntax is as follows:

## Basic syntax ##
find /dir/to/search/ -options -name 'regex' -action
find /dir/to/search/ -options -iname 'regex' -action
find /dir/to/search/ -type f -name 'regex' -print
find /dir/to/search/ -type f -name \( expression \) -print
## ---------------------------------------------------------------------- ##
## The -and operator is the logical AND operator                          ## 
find /dir/to/search/ -type f -name 'expression -and expression' -print
## ---------------------------------------------------------------------- ##
## The -or operator is the logical OR operator.  The expression evaluates ##
## to true if either the first or the second expression is true.          ##
find /dir/to/search/ -type f -name 'expression -or expression' -print

Examples: find command and logical operators

Find any file whose name ends with either ‘c’ or ‘asm’, enter:
$ find . -type f \( -iname "*.c" -or -iname "*.asm" \)
OR find all *.conf and text file in /etc/ directory:
$ find . -type f \( -name "*.conf" -or -name "*.txt" \) -print
Sample outputs:

Fig.01: Linux find command exclude files command

Fig.01: Linux find command exclude files command

The parentheses must be escaped with a backslash, “\(” and “\)“, to prevent them from being interpreted as special shell characters. The -type f option force to only search files and not directories. The -or operator either find .c or .asm file.

Understanding find command operators

Operators build a complex expression from tests and actions. The operators are, in order of decreasing precedence:

( expr )Force precedence. True if expr is true
expr -not expr
! expr
True if expr is false. In some shells, it is necessary to protect the ‘!’ from shell interpretation by quoting it.
expr1 -and expr2 expr2 is not evaluated if expr1 is false.
expr1 -or expr2 expr2 is not evaluated if expr1 is true.
WARNING! The ‘-or’, ‘-and’, and ‘-not’ operator are not available on all versions of find. Usually GNU find supports all options. Refer your local find command man page for more information.

How do I ignore hidden .dot files while searching for files?

Find *.txt file but ignore hidden .txt file such as .vimrc or .data.txt file:
$ find . -type f \( -iname "*.txt" ! -iname ".*" \)
Find all .dot files but ignore .htaccess file:
$ find . -type f \( -iname ".*" ! -iname ".htaccess" \)

Say hello to -path option

This option return true if the pathname being examined matches pattern. For example, find all *.txt files in the current directory but exclude ./Movies/, ./Downloads/, and ./Music/ folders:

cd $HOME
find . -type f -name "*.txt" ! -path "./Movies/*" ! -path "./Downloads/*" ! -path "./Music/*" 
## add -ls option to get ls -l kind of output ##
find . -type f -name "*.txt" ! -path "./Movies/*" ! -path "./Downloads/*" ! -path "./Music/*" -ls

Sample outputs:

./Desktop/Bills-PDF/receipt-05-OCT-14 10-08 AM.txt
./Desktop/Bills-PDF/wufoo/Give Us Feedback for nixCraft.txt
./Desktop/untitled 4.txt
Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:

{ 15 comments… add one }
  • scott August 8, 2009, 1:49 am

    Thanks for the ! example!!

  • vapere July 15, 2010, 1:50 pm

    Hi! Cna u help me?
    I need find all *.css file but exclude one file /lang/en.css, but include /1/lang/en.css

    • wajrou November 4, 2010, 8:29 pm

      find . -path ‘*/lang/en.css’ -prune -o -name ‘*.css’ -print; find . -path ‘*/1/lang/en.css’ -print

  • mactruck April 26, 2012, 10:28 pm

    can you help me?
    I need to find all files older than 500 days.

    this is my code so far and I get an error saying -iname is not a valid option.

    find . -type f \( ! -iname ".*" \) -mtime +500 -exec ls {} \;
    • bsod January 7, 2014, 8:36 am

      find . -type f -not -name ‘.*’ -mtime +500 -exec ls {} \;

  • Nikesh Jauhari May 2, 2012, 8:43 pm

    thanks for excellent tips on find command

  • saireddysateesh May 30, 2012, 11:17 am

    i have some issue
    having a directory LOG. in that so many files and directories are there. i want to find and delete the file which starts with PS. but it should not check sub directories.

  • amol July 13, 2012, 7:08 am

    I have to delete the files modified yesterday so I can keep only today files (which I download daily ) in current directory how do I do that ?

  • Gary December 31, 2014, 6:25 pm

    Is there a way to get a list of “.c” files and grep the contents only in those files for a keyword?

    I tried
    find . -type f \( -iname “*.c” \) |grep -i -r “keyword”

    It seems like grep is still going through all the files and not just the “.c” files.

    • Richard Mason February 27, 2015, 1:50 pm
      find . -name "*.c" -exec grep -ir "keyword" {} ";"
  • pankaj February 9, 2015, 3:15 am

    How can i find a last 5 min created file in a folder not the sub folder like.

    i serach a file inside folder /home/pankaj but not in /home/pankaj/test/test1

    • Tommy October 15, 2015, 8:19 am

      You can not check creation time but you can check for last change like this:

      find /home/pankaj -maxdepth 1 -cmin -5 -type f

      The “-maxdepth 1” keeps find from looking in subfolders but will check the subfolder itself, that’s why you use “-type f” to only look for files, “-cmin” specifies the minutes since last change, use +5 to get files older than 5 min.

  • Dominik February 21, 2016, 2:32 pm

    Hi Pankaj, i was faced same issue, i search on internet and found this article, its really helpful, i succeed that with Long Path Tool, you can try

  • Arul May 20, 2016, 4:44 pm

    In find command i am not entered file name, so it’s showing error message.

    Eg: find . -name

    error like “parameter not entered”

    I want to discard this error

    I used the Error handling method like “2>/dev/null
    then also error is showing.

    if any one knows reply me.

  • donnghi July 3, 2016, 12:30 am

    Your tutorial is very clear and helpful.
    Thank so much!

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">

   Tagged with: , , , , , , , , , , , , , ,