Find command: Exclude / Ignore Files ( Ignore Hidden .dot Files )

by on August 31, 2008 · 8 comments· LAST UPDATED August 31, 2008

in , ,

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

A. Find command support standard UNIX regex to match or exclude files. You can write complex queries easily with regex.

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" \)
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
True if expr is false. In some shells, it is necessary to protect the ‘!’ from shell interpretation by quoting it.
expr1 -and expr2 And; expr2 is not evaluated if expr1 is false.
expr1 -or expr2 Or; 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" \)

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 8 comments… read them below or add one }

1 scott August 8, 2009 at 1:49 am

Thanks for the ! example!!

Reply

2 vapere July 15, 2010 at 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

Reply

3 wajrou November 4, 2010 at 8:29 pm

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

Reply

4 mactruck April 26, 2012 at 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 {} \;

Reply

5 bsod January 7, 2014 at 8:36 am

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

Reply

6 Nikesh Jauhari May 2, 2012 at 8:43 pm

thanks for excellent tips on find command

Reply

7 saireddysateesh May 30, 2012 at 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.

Reply

8 amol July 13, 2012 at 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 ?

Reply

Leave a Comment

Tagged as: , , , , , , , , , , , , , ,

Previous Faq:

Next Faq: