Hello People! Thanks for your great feedback on the basics of the
find command blog. After reading that blog most people requested me to write the advanced version of
find command. Thanks again for all your patience. Now, it’s time to take your skills to the next level. In this article, let’s explore the advanced version of
For those who’re reading this for the first time, in my last blog about
find command, I covered the basics of file searching and explored some powerful commands to search files quickly using Linux. If you haven’t read my previous blog I would highly recommend you to read that blog and come back here.
How to search files owned by a user
find commands accept a special argument called user which you can use to filter the files owned by a user.
The syntax is,
find [path] -user [username] [options]
Let’s say you want to search all the files owned by me (my username on this laptop is
aruna), you can achieve it by using the below command.
find ./5minslearn/ -user aruna
The above command will list all the files owned by the user
aruna in the
You may notice the
[options] added to the end of the syntax. This basically means you can add any arguments following this to make your search a bit more effective.
For example, let’s try to filter only the directories owned by me. To filter the directories, you have to add
-type option. Here’s the command for it.
find ./5minslearn/ -type d -user aruna
From the above screenshot, you can notice that this command lists all the directories and sub-directories owned by me inside
How to search files that have specific permission
-perm argument, you can search for files having specific permission.
Here’s the syntax,
find [path] -perm [permissions] [options]
For example, let’s assume you want to search all the files that have read-only permission in the current directory. The code for read-only files is
Note: If you don’t know how this code (
400) is generated and curious to know, please refer
How can I remove permissions using Octal Mode? section of my Linux File Permission blog.
find . -perm 400
I created this
welcome.txt file long ago with read-only permission. You can see from the above screenshot that
find command has identified it perfectly.
I would like to share a weird experience that I faced in my career.
I was working on a project that contains a huge number of minified (around 200+) files. Out of those, I have to find all the files that don’t have read-only permission. I’m pretty sure that it’ll be too low that I can count on one hand. Looking over 200 files and finding 5 files is a time-consuming process. So, I decided to find an alternative way.
I searched on Google and I was surprised by the result.
It can be achieved by just prepending a
-not flag with our command. Here’s the command for you.
find . -not -perm 400
The command will list all the files in the current directory that do not have read-only permission.
The additional advantage is that you can prepend this
-not flag before any option in
find command to find the opposite of the search query.
Here’s another example for you,
find . -not -type f
Running the above command will list all the items that are not files (directories, symlinks, etc. ) in the current directory.
How to search files that belong to a particular group
As we see in our File Permissions blog, there may be multiple people who share a common machine for their work. They’re grouped together as Developers, QA, etc. What if you want to find all the files that people in
Developers group can view? That’s difficult, right?
But don’t worry. Here’s a simple alternative from
-group argument in the
find command you can search for all files that belong to a group.
The syntax is,
find [path] -group [groupname] [options]
I have a group with my name on my machine. Let’s try to find all the files owned by my group.
find . -group aruna
You can also combine
-group option with other
find command options to refine your search
For example, you can combine
-group option with
-perm option to search files that belong to a group and have specific permissions.
find . -group aruna -perm 400
The above command will list all read-only files that belong to
Similarly, as I mentioned earlier, you can also combine
-group option with
-not option to find files that do not belong to a particular group.
Let’s try to find the files that do not belong to the
find . -not -group sudo
How to find modified files after a file
-newer option in the find command search for files that are modified after the last modification of the given file.
The syntax is
find [path] -newer [reference_file]
For example, if you want to search for all files that are modified after
notes.txt file you can use the following command.
find . -newer notes.txt
This command will search for all files in the current directory that were recently modified after
Search for files that were accessed within minutes ago
To search for files that were accessed a few minutes ago, you can use
-amin argument. This argument will accept the number of minutes (
n) and finds all the files that are accessed
n minutes ago.
The syntax is,
find [path] -amin [n] [options]
For example, Let’s try to find the files that were accessed within the last 30 minutes,
find . -amin -30
Hope you notice the negative (minus) sign before the number. It indicates the file access in the past.
How to search all the files that are empty
-empty flag in the find command is used to search for files and directories that are empty.
Here’s the syntax,
find [path] -empty [options]
To search for files all empty files and directories, you can use the following command
find . -empty
To search only for the empty directories, you can combine the
-empty option with
find . -type d -empty
This command will list all the empty directories in the current directory.
-empty flag is often appended by
-delete flag to delete all the empty files and folders.
How to find files that match a specific regular expression
-regex argument allows you to apply the filter by regular expressions.
find [path] -regex [expression] [options]
For example, Let’s assume you want to search the files whose names start with the letter
w. You can use the below command to do that,
find . -regex "./w.*"
In this article, you’ve learned some advanced tips to search files effectively and perform various operations over them.
I would recommend you learn the find command by trying it out. Assume a few scenarios yourself and try to find the files using the techniques you learned. Dropping a couple of scenarios for you here,
- Find and delete files that end with
- Find files that are not owned by you
- Find files that do not match a pattern
Hope you enjoyed reading this article!
Subscribe to my newsletter by entering your email address in the below box to receive similar blogs in your inbox.
Have a look at my site which has a consolidated list of all my blogs.