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.
Syntax
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]
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