Find command in Linux helps you to search for files in a directory hierarchy. This command provides lot of options. You can find using names, case sensitive/insensesitive, pattern, time when accessed and performe action as well.
Find syntax
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point…] [expression]
This command support lot many Options, you can run man find command to see all these option. Here, we will see a pracial use of the find command.
The most common command used to find and filter files on Linux is the find
command.
This command performs a search of one or more directories on the system along with search criteria. In summary, the basic syntax used by the find command is as follows
find [directory] [options] [search term]
Where we first run the find
command, then we indicate a directory where the search will start, then the options, and finally a search term that can be a name or something similar.
By default, the find
command will search the current directory of the prompt. This can be changed to an explicitly stated directory or by using a reference such as
/ Searches the entire system
~ You will only search in the home directory
. Search the current directory.
Using the find command – Searching by name
As you might expect, the most important and well-known way of searching is by name. The find command requires the -name option
For example
find . -name file
In this case, we are looking for files in the current directory (.) that are called file. Remember that you can specify a search directory:
find /home/user/Documents -name file
You can also specify a file extension:
find /home/user/Documents -name file.txt
Something especially useful is to make the find command case insensitive. To do this, use -iname
find /home/user/Documents -iname file.txt
In this case, results will appear as File.txt or fiLe.txt
We can also search for files that are different from the search criteria. For example:
find . -not -name file
In this case, all files not called file will be searched.
Searching by a directory and other types
The command type also supports other file types and even directories. To specify that we are looking for some of them just use the filters and the desired options:
- d – directory or folder
- f – normal archive
- l – symbolic links
- c – character files
- b – block files
For example, to search for any of these files you need to combine it with the -name
option explained in the previous section. For example:
find / -type d -name example
This command will search the entire system for folders called example.
The type f is quite useful if we want to exclude folders and symbolic links from the search.
find / -type f -name example
In this case, the search will only be for files with an extension excluding folders and symbolic links.
Combining these two options will make the results much more precise.
Using the find command to search by date or size
The find command also allows you to search by date. This is possible thanks to other options we can use. These are:
- -atime Most recent date the file was read or written
- -mtime – The most recent date the file was modified.
- -ctime Latest date the file’s metadata was updated.
Together with these new options, we can improve the quality of the search. However, to use it, it is necessary to add the + or – signs preceded by a number representing the days. For example:
find / -atime +1
This will search for files that were accessed more than one day ago.
Or also:
find / -ctime -1
This means that the files that have changed their metadata less than a day ago will be searched.
These options are really useful especially for documents that we know have been modified but we don’t remember where they are.
We can also make searches keeping in mind the size of the file we want to find. To do this, we have to follow this syntax
find [directory] -size [magnitude] [size-unit]
The size units that are supported are as follows:
- c – bytes
- k – kilobytes
- M – megabytes
- G – gigabytes
Also, by using the + or – signs we can further specify the search by size.
To search for all files on the system that weigh more than 1G the syntax would be as follows
find / -size +1G
Or all files less than 2 Gigabyte
find / -size -2G
You can also combine this option with one of the date options and improve the results.
Search files by property and permissions
A more advanced type of search is to search for files or folders belonging to a system user. This situation can be very useful in the case of servers that have many users created. Or on family computers that have several accounts created.
To perform the search, it is necessary to add the -user
option to the command and specify a parameter. For example:
find / -user imaginelinux
In this case, all system files belonging to the imaginelinux
user will be searched. Of course, you can combine it with the -name
option and thus filter the search better
find / -user imaginelinux -name file
Finally, you can search for files that do not belong to any user with the -nouser
option
But you can not only search by users but also by a group. Just change the -user
parameter to -group
find / -group imaginelinux
You can also combine it with the -name
parameter. To search for files that do not belong to any group there is the option -nogroup
It is also necessary to search for files by permissions. This is possible thanks to the -perm
option and we have to indicate some permissions.
The way to use this option is as follows:
find / -perm 755
This will search for files with permissions of 755 whose value you can adjust to improve the search criteria.
Other useful options
Other very useful options can serve us from one moment to the next.
First of all, we can search for empty files and folders with the -empty
find / -empty
Quite useful if we want to get rid of these useless files and have a clearer view of the system.
We can also search for executables or files that have this permission. In this case, the option to use is -exec
find / -executable
Or you can also search for archivists who have reading permission
find / -readable
This will search for files accessible by the user who executes the command.
It is also possible to check the files that can be edited by the current user. In this case, we would have to use the -writable
find / -writable
By default, the find command performs recursive searches at the maximum possible level. This behavior can be controlled with the -maxdepth
option.
Example:
find / -maxdepth 1
This will search files only up to the first level of directories. In this case, it will only search for folders that are in / but not beyond.
Conclusion
Searching for files or folders in the terminal might be thought to be something very complex, but the reality is that it is not. Thanks to the find command we can do it without almost any problems and it’s a practical way to do it because in the terminal almost no resources are consumed.
Have you used the find command? Do you use it frequently? Leave us a comment