In this post we shall learn to use the find command along with various options that it supports.
The basic syntax syntax of find command is:
find [pathnames] [conditions]
You have several options for matching criteria:
-atime n : File was accessed n days ago
-mtime n : File was modified n days ago
-size n : File is n in size (a block is 512 bytes)
-type c : Specifies file type: f=text file, d=directory
-fstype : Specifies file system type example nfs
-name : Name of the filen you want to search
-user : Specifies file’s owner
-group : Specifies file’s group owner
-perm p : File’s access mode
Some examples based on the above criteria:
-mtime +7 : Matches files modified more than seven days ago.
-atime -2 : Matches files accessed less than two days ago
-size +100 : Matches files larger than 100 blocks (50KB)
-mmin -60 : find all the files which are modified in last 1 hour
-cmin -60 : find all the files which are changed in last 1 hour
Most Frequently Used Find Command Examples in Linux
Find Files Under Home Directory
Find all the files under /home directory with name foo.txt.
# find /home -name foo.txt
/home/foo.txt
Find Files Using Name in Current Directory
Find all the files whose name is foo.txt in a current working directory.
# find . -name foo.txt
./foo.txt
# find / -name passwd
This command will find passwd file under all sub-directories starting from root directory.
Find Files Using Name and Ignoring Case
Find all the files whose name is ora.txt and contains both capital and small letters in /home directory.
# find /home -iname Foo.txt
./Foo.txt
./Foo.txt
Find and remove single File
To find a single file called ora.txt and remove it.
# find . -type f -name “ora.txt” -exec rm -f {} ;
Find and remove Multiple File with same extension
To find and delete all files of a specific extension such as .txt, .gz use.
# find . -type f -name "*.txt" -exec rm -f {} ;
Find Directories Using Name
Find all directories whose name is foo in / directory.
# find / -type d -name foo
/foo
Find hidden files
Hidden files on linux begin with a period (.). list all hidden files. This command will list all hidden files in the specific directory like temp etc.
# find /tmp -type f -name ".*"
# find ~ -type f -name ".*"
Note: Use proper directory path.
Finding top 10 largest files in Linux
The following command will display the top 10 biggest file in the current directory and its subdirectory. This may take a while to execute depending on the total number of files and size of the files.
# find . -type f -exec ls -s {} ; | sort -n -r | head -10
Finding the Top 10 Small Files
The following command will display the top 10 smaller file in the current directory and its subdirectory. but the only difference the sort is ascending order.
# find . -type f -exec ls -s {} ; | sort -n -r | head -5
In the above command, you will see ZERO byte files also ( empty files ). So, you can use the following command to list the smaller files other than the ZERO byte.
# find . -not -empty -type f -exec ls -s {} ; | sort -n | head -5
Finding Files based on Modification and accessed time
Find files modified 20 days back
To find all the files which are modified 20 days back.
# find / -mtime 20
Find files accessed in last 20 days
Find all files that were accessed in the last 20 days.
# find / -atime 20
Find files modified in a range of days
Find all files that were modified between 50 to 100 days ago.
# find / -mtime +50 –mtime -100
Find Changed Files in Last 1 Hour
To find all the files which are changed in last 1 hour.
# find / -cmin -60
Find Modified Files in Last 1 Hour
To find all the files which are modified in last 1 hour.
# find / -mmin -60
Find Accessed Files in Last 1 Hour
To find all the files which are accessed in last 1 hour.
# find / -amin -60
Finding Files based on Size
Using the -size option you can find files by size.
Find files bigger than 100M
# find ~ -size +100M
Find files smaller than 100M
# find ~ -size -100M
Find 50MB Files
To find all files matches the exact given size i.e, 50M
# find / -size 50M
Find Size between 50MB – 100MB
To find all the files which are greater than 50MB and less than 100MB.
# find / -size +50M -size -100M
Find and Delete 100MB Files
To find all 100MB files and delete them using one single command.
# find / -size +100M -exec rm -rf {} ;
Find Files and Directories based on type using option -type
Find only the normal files
# find . -type f
Find all directories
# find . -type d
Find only the socket files.
# find . -type s
Find all the hidden files
# find . -type f -name ".*"
Find all the hidden directories
# find -type d -name ".*"
Find Specific Files and Delete
Find all .mp3 files with more than 10MB and delete them using one single command.
# find / -type f -name *.mp3 -size +10M -exec rm {} ;
Find all Empty Directories
To file all empty directories under specific path.
# find /tmp -type d -empty
Finding Files based on Permissions
Find Files having 777 Permissions
Find all the files whose permissions are 777
# find . -type f -perm 0777 -print
Find Files Without 777 Permissions
Find all the files without permission 777.
# find / -type f ! -perm 777
Find SGID Files with 644 Permissions
Find all the SGID bit files whose permissions set to 644.
# find / -perm 2644
Find Sticky Bit Files with 551 Permissions
Find all the Sticky Bit set files whose permission are 551.
# find / -perm 1551
Find SUID Files
Find all SUID set files.
# find / -perm /u=s
Find SGID Files
Find all SGID set files.
# find / -perm /g+s
Find Read Only Files
Find all Read Only files.
# find / -perm /u=r
Find Executable Files
Find all Executable files.
# find / -perm /a=x
Find Files with 777 Permissions and Chmod to 644
Find all 777 permission files and use chmod command to set permissions to 644.
# find / -type f -perm 0777 -print -exec chmod 644 {} ;
Find Directories with 777 Permissions and Chmod to 755
Find all 777 permission directories and use chmod command to set permissions to 755.
# find / -type d -perm 777 -print -exec chmod 755 {} ;