In this post we will look at the linux find
command and how to search and find files with different attributes.
Linux find Command
The Linux find
command is a built in powerful tool that can be used to locate and manage files and directories based on a wide range of search criteria.
For example, we can find files by their name, extension, size, permissions, etc. We can also use the find
command to search for a particular text inside a file which we don’t know the name of.
Let’s see some usage of the find
command with examples:
Searching for a file by name
If you know the name of a file but can’t remember the directory it’s in you can use the following command from the root directory:
find . -name sales.csv
Sample output:
./accounts/sales.csv
Searching for a specific file in a directory
If you want to search for specific file(s) in a directory, we can use:
find ./test -name testCases*
Sample output:
./test/testCases10.txt
./test/testCasesPassed.txt
./test/testCasesFailed.log
In the above case, we are only searching within the “./test” directory.
Find files by extension
To search and find files by a certain extension we use:
find . -name *.jpg
Sample output:
./test/results/failedTests.jpg
./test/project.jpg
./home/profile_pic.jpg
./tmp/cute-cats.jpg
Find files or directories with certain names
To find only files, we need to use the -f
option:
find ./ -type f -name "results*"
Sample output:
./test/results_latest.log
./test/results_archive.pdf
To find only directories, we need to use the -d
option:
find ./ -type d -name "results*"
Sample output:
./test/results
Find files in multiple directories
If you want to search and list all files with a given name in multiple directories you can either start the search at root folder, or if you know the directories, you can specify them.
Example:
find ./test ./logs -name failed*.* -type f
Sample output:
./test/failed_tests.txt
./logs/failed_tests.log
Find files containing a certain text
Sometimes you want to find a file and you don’t know its name, but you know it has a certain text inside it.
You can use:
find ./test -type f -exec grep -l -i "login_scenarios" {} ;
Here, the -i
option is used to ignore case, so Login_Scenarios and login_scenarios will both be found.
Find files by size
We can even find files by different sizes. Size options are:
c
bytesk
kilobytesM
MegabytesG
Gigabytes
For example to find files on an exact size we use:
find / -size 10M
And to find files which are greater than a certain size, we use:
find ./test -size +2M
The above will find all the files which are greater than 2MB in the ./test folder.
Find and delete specific files
To find and delete specific files we use:
find . -type f -name "temp*" -exec rm {} ;
Conclusion
In this article you learned about how to use the linux find command to search for files based on name, extension, size and type.