Linux: Finding and Locating files with find command part # 1

by on July 22, 2005 · 14 comments· LAST UPDATED August 24, 2007

in , ,

Many newcomers find it difficult use the find command at shell prompt under Linux / *BSD or Solairs UNIX oses. Find is nifty tool on remote server where UNIX admin can find out lot of information too. Desktop users may find handy GNOME Search tool as a utility for finding files on system. Find command can perform a search based on a variety of search constraints. It searches through one or more directory tree(s) of a filesystem, locating files based on some user-specified criteria. By default, find returns all files below the current working directory. Further, find allows the user to specify an action to be taken on each matched file. Thus, it is an extremely powerful program for applying actions to many files. It also supports regexp matching.

GNOME Search Tool GUI Program

GNOME Search Tool is a utility for finding files on your system. To perform a basic search, you can type a filename or a partial filename, with or without wildcards. You can start this program from menus or by typing following command at shell prompt:
$ gnome-search-tool &
Internally GNOME Search Tool uses the find, grep, and locate UNIX commands. The case sensitivity of the search depends on your operating system. For example, on Linux, the find, grep, and locate commands support the -i option, so all searches are case-insensitive.

the GNOME Linux / UNIX GUI Search Tool(click to enlarge)

Find command syntax

find {search-path} {file-names-to-search} {action-to-take}

Where,

  • search-path : Define search path (default current directory). For example search in /home directory.
  • file-names-to-search : Name of the file you wish to find. For example all c files (*.c)
  • action-to-take : Action can be print file name, delete files etc. Default action is print file names.

Find command examples

Let us try out some examples.

Finding files and printing their full name

You wish to find out all *.c (all c source code) files located under /home directory, enter:
$ find /home -name "*.c"

You would like to find httpd.conf file location:
$ find / -name httpd.conf

Finding all files owned by a user

Find out all files owned by user vivek:
# find / -user vivek

Find out all *.sh owned by user vivek:
# find / -user vivek -name "*.sh"

Finding files according to date and time

Files not accessed in a time period – It is useful to find out files that have or have not been accessed within a specified number of days. Following command prints all files not accessed in the last 7 days:
# find /home -atime +7

  • -atime +7: All files that were last accessed more than 7 days ago
  • -atime 7: All files that were last accessed exactly 7 days ago
  • -atime -7: All files that were last accessed less than7 days ago

Finding files modified within a specified time – Display list of all files in /home directory that were not last modified less than then days ago.
# find /home -mtime -7

Finding newer (more recently) modified files

Use -newer option to find out if file was modified more recently than given file.
# find /etc/apache-perl -newer /etc/apache-perl/httpd.conf

Finding the most recent version of file

It is common practice before modifying the file is copied to somewhere in system. For example whenever I modify web server httpd.conf file I first make backup. Now I don't remember whether I had modified the /backup.conf/httpd.conf or /etc/apache-perl/httpd.conf. You can use the find command as follows (tip you can also use ls -l command):
find / -name httpd.conf -newer /etc/apache-perl/httpd.conf

Locate command

The locate command is often the simplest and quickest way to find the locations of files and directories on Linux and other Unix-like operating systems.

For example, the following command uses the star wildcard to display all files on the system that have the .c filename extension:
# locate "*.c"

Further readings

  • Read find and locate command man page for more information.
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!
1 Anonymous July 23, 2005 at 2:22 pm

Thanks for nice blog!

2 Sabu August 18, 2005 at 12:41 pm

This post has been removed by the author.

3 Sabu August 18, 2005 at 12:43 pm

Good one..2 more from me..

# files modied 3 days ago but less than 5 days.

find /home -type f -mtime +2 -mtime -5

# find all files with name ‘testfile’ in /home directory recursively and contains the word hello.

find /home -type f -name testfile | xargs grep -l -i hello

4 Amit sharma August 4, 2006 at 6:50 am

Hi nix, appreciate your efforts.

For all those people who are looking for sum more examples.. do check out http://www.amitsharma.linuxbloggerscom/how_to_find.htm

With best regards..

5 Dan Coe February 9, 2007 at 9:59 am

Thanks for educating me on the basics of using find on Linux. Most appreciated from a newbie.

6 Paul Hudgens February 6, 2009 at 10:20 pm

I’m hoping to find a command that will allow me to list all of my PDS files in a given directory but which may have a .pds suffix or a .PDS suffix or a .Pds suffix , ie case insensitive so that with a single command, I see all such files – and then perhaps send that list to a zip command.

Thanks for any help
Paul Hudgens
Denver

7 Paul Hudgens February 6, 2009 at 10:20 pm

By the way my previous post re: case insensitivity is for a Sun system.

Thanks

8 nixCraft February 6, 2009 at 10:59 pm

Option #1: Install gnufind

find . -iname "*.pds"

Option #2: Use Sun find command

find . -type f  -print | grep -i "*.pds" 

9 Alex February 19, 2009 at 6:14 am

I’m hoping to find a command that will allow me to list all files owned by a specific user on a specific file systems. So, I can create a script and (using this script) be able to search for other owners on other file systems without having to edit this file.

Thanks for any help,
Alex

10 nixCraft February 19, 2009 at 6:49 am

Use find command:
find /path/to/dir -iname "*.c" -user vivek -print

The -user UID : Find file is owned by user UID (numeric user ID allowed).

11 V February 24, 2009 at 4:18 pm

Open all .cpp files that contain the string foo (case insensitive in them):

vi `find ./ -name ‘*.cpp’ -exec grep -qi ‘foo’ {} \; -print0 -exec echo -n ‘ ‘ \;`

Alternatively,

find ./ -name ‘*.cpp’ -exec grep -qi ‘foo’ {} \; -exec vim {} \;

The second version opens one file at a time, as it finds it. The first version takes some time to find all files first, and then opens them all :D

And, of course, in general stuff between -exec and \; can be any command you want with {} being replaced by the matched file name.

12 manpreet April 17, 2009 at 5:11 am

hiii
i want to find all files with inode number 20 and less than 20 with find command.
if someone can help me i ll be grateful to the person
thanks

13 chandan April 1, 2010 at 5:37 am

Hi,

I am unable to find out the boot error which had occured some where in last week while rebooting the server.

Can someone help me which command to use to find that error.

Thanks

14 princeda August 1, 2011 at 10:42 am

Hi vivek,

How to delete the 3 days old backup files which is in /backup file, using find command?

Comments on this FAQ are closed. If you'd like to continue the discussion on this topic, you can do so at our forum.

Tagged as: , , , , ,

Previous post:

Next post: