How to search files effectively — Part 2 — GoGoSoon
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 find command.
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 5minslearn directory.
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 5minslearn directory.
How to search files that have specific permission
Using -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 400.
**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 find command.
Using -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 aruna group.
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 sudo group.
find . -not -group sudo
How to find modified files after a file
The -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.tx
This command will search for all files in the current directory that were recently modified after notes.txt file.
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
The -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 -type option
find . -type d -empty
This command will list all the empty directories in the current directory.
The -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
The -regex argument allows you to apply the filter by regular expressions.
Syntax is,
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.*"
Conclusion
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 .txt
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.
Originally published at gogosoon.com on March 7, 2023.