Unix command to find a file in a directory and subdirectory

I think I lost (or forgot the file location) a file named toms-first-birthday.mp4 on my Unix based system. Is there is a Unix bash shell command to find a file called “toms-first-birthday.mp4” in a directory and subdirectories?

You need to use the find command on a Linux or Unix-like system to search through directories for files.


The syntax is
find /search/directory/ -name "matching file search criteria" -actions
find /dir/to/search -name "pattern" -print
find /dir/to/search -name "file-to-search" -print
find /dir/to/search -name "file-to-search" -print [-action]

kbd { display: inline-block;
margin: 0 .1em;
padding: .1em .6em;
font-family: Arial,”Helvetica Neue”,Helvetica,sans-serif;
font-size: 11px;
line-height: 1.4;
color: #242729;
text-shadow: 0 1px 0 #FFF;
background-color: #e1e3e5;
border: 1px solid #adb3b9;
border-radius: 3px;
box-shadow: 0 1px 0 rgba(12,13,14,0.2), 0 0 0 2px #FFF inset;
white-space: nowrap;

The find command will begin looking in the /dir/to/search/ and proceed to search through all accessible subdirectories. The filename is usually specified by the -name option. You can use other matching criteria too:

  • -name file-name – Search for given file-name. You can use pattern such as *.c
  • -iname file-name – Like -name, but the match is case insensitive. For example, the patterns `fo*’ and `F??’ match the file names `Foo’, `FOO’, `foo’, `fOo’, etc. The pattern `*foo*` will also match a file called ‘.foobar’.
  • -user userName – The file’s owner is userName
  • -group groupName – The file’s group owner is groupName
  • -type N – Search by file type. N can be any one of the following:
    • b : block (buffered) special
    • c : character (unbuffered) special
    • d : directory
    • p : named pipe (FIFO)
    • f : regular file
    • l : symbolic link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken. If you want to search for symbolic links when -L is in effect, use -xtype.
    • s : socket
    • D : door (Solaris Unix)

The default action is to display the file name when criteria is matched. You can specify the following actions when file found:

  • -print : Show pathnames of matching files.
  • -exec cmd {} + : Run command cmd on a file.
  • -ls : List current file in ls -dils format on screen.
  • -delete : Delete file.

Unix find command examples

To find and report toms-first-birthday.mp4 file in your HONE directory, enter:
$ find $HOME -name "toms-first-birthday.mp4" -print
To find and report all mp4 files starting at the /home/vivek/ directory, enter:
$ find /home/vivek/ -name "*.mp4" -print
To find and report all mp4 files starting at the /home/vivek/ and /tmp/ directory, enter:
$ find /home/vivek/ /tmp/ -name "*.mp4" -print
For more info, see the Unix find command manual page:
$ man find

A note about locate command on Linux/Unix

To find files by name use locate command:
locate file-name
locate pattern
locate [option] pattern
locate toms-first-birthday.mp4 | more
locate -b 'toms-first-birthday.mp4'
locate *.sh | more

Sample outputs:

locate command in action

Posted by: SXI ADMIN

The author is the creator of SXI LLC and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.