Unveiling Linux Command's - find
Tags: linux, find, terminal
Published: 2023-08-19 14:28:13

Searching for files on your Linux system can sometimes feel like searching for a needle in a haystack. The `find` command is here to make your file-finding tasks easy. In this post, we'll walk you through various scenarios where the `find` command becomes very useful.

## Finding files by name 
Ever found yourself hunting for a file but forgetting where you stashed it? The `find` command can help you pinpoint it. When you're in your terminal, type
```bash 
find /path/to/search -name "filename"
```
Just replace `/path/to/search` with your starting directory and `filename` with the elusive file's name.
## Finding files by size 
Sometimes you're dealing with large files, and sometimes it's the tiny ones causing a stir. `find` can help with that too! To locate files based on their size, use
```bash
find /path/to/search -size +size_unit
```
Replace` /path/to/search` with your directory and size_unit with the size you're after (like `10M` for 10 megabytes). To find small files, use - instead of +.
## Finding files by user 
Who's the owner of that file? `find` can answer that. To discover files owned by a specific user or group
```bash 
find /path/to/search -user username
```
Replace /path/to/search with your directory and username with the owner's name. Similar to the user scenario, you can also use `-group groupname` to find files owned by a particular group.
## Finding files by permission
Permissions can be quite the puzzle. But `find `can help you unravel it. To identify files with specific permissions, type: 
```bash
find /path/to/search -perm permissions
```
Here, `/path/to/search` is your directory, and `permissions` are the numeric values (like 755 for read, write, and execute). If you want files with any of the specified permission bits, use -perm /permissions.
## Finding files by date and time


The `find` command help you to navigate through time and locate files based on their access, modification, or change times.
```bash 
find /path/to/search -atime/-ctime/-mtime +/-time_unit
```
Replace `/path/to/search` with your directory, pick `atime`, `ctime`, or `mtime`, and adjust `+/-time_unit` to specify the time frame.

Following are some example cases to understand 

### Find Recently Modified Files in the a directory
Imagine you've made some recent changes to your system configuration files in a directory, and you want to identify files that have been modified within the last 10 minutes
```bash 
find /path/to/search  -mmin -10
```
This command will provide you with a list of files in the `/etc` directory that have been modified within the last 10 minutes.
### Locate Recently Changed files
To find files that have been changed within the last 2 days across multiple important directories, use this `find` command
```bash 
find /usr/bin /usr/sbin -ctime -2
```
By executing this command, you'll obtain a list of files that have undergone changes in the specified time frame.
### Identify Unused Files in Web Directories
When managing websites, it's important to keep track of files that haven't been accessed for a while. For instance, let's say you want to find files in the `/var/www` directory that haven't been accessed for over 300 days. Here's the `find` command to achieve that:
```bash
find /var/www -atime +300
```
Upon executing this command, you'll receive a list of files within the specified directories that meet the time-based criteria.
## Finding files and executing commands
The `find` command is not just about discovering files; it's also about taking action on them. This is where the `-exec` flag comes into play. With it, you can execute a command on each file that matches your search criteria.
```bash 
find /path/to/search -name "filename" -exec command {} \;
```
For example, find text files and print their contents
```bash 
find /home/user/documents -name "*.txt" -exec cat {} \;
```
## Interactively Approve Actions
Sometimes, before making changes to files, you want to be sure. The `-ok` flag in `find` enables an interactive mode that asks for your confirmation before executing a command on each file.

```bash 
find /path/to/search -name "filename" -ok command {} \;
```
For example safely deleting files
```bash 
find /home/user/trash_files -name "*~" -ok rm {} \;
```
With these scenarios, `find` becomes a tool not only for locating files but also for performing actions on them, whether you're printing file contents or confirming deletions. It adds a layer of efficiency and control to your file management tasks