Home Beginner's Guide How to effectively use the find command in Linux

How to effectively use the find command in Linux

Get into the functionalities of the find command in Linux through this detailed guide. Learn how to locate files and directories based on various criteria like name, size, and modification date, with practical examples to streamline your command-line file management tasks.

by Divya Kiran Kumar
find command in linux

In my years as a Linux enthusiast, one tool has consistently stood out for its versatility and depth: the find command. This powerful utility is like the Swiss Army knife for searching files and directories. It’s not just about finding files by name; find dives deep, allowing users to search based on size, type, modification date, and much more. Here, I’ll share my insights, experiences, and some handy examples to help you master this indispensable command.

Understanding the basics of Linux find command

At its core, find is simple to use. The basic syntax is:

find [where to start searching from] [options] [what to find]

For instance, to find all files named example.txt starting from the current directory, you’d use:

find . -name example.txt

Here, . signifies the current directory. Simple, right? But don’t let its simplicity fool you; find has layers that, once peeled back, reveal its true power.

Example output:

Assuming there are a few example.txt files scattered across different directories:

./documents/reports/example.txt
./backup/example.txt
./example.txt

Delving into find command options

find comes with a plethora of options. Let me highlight a few that I find myself coming back to, time and again.

Finding files by type

You can search for files, directories, symbolic links, etc., using the -type option. For instance, to find directories named src:

find . -type d -name src

This command searches for directories (d) named src from the current directory.

Example output:

If there are several src directories within the current directory:

./projects/project1/src
./lib/src
./src

Searching by modification time

The -mtime option is particularly useful for finding files modified within a certain timeframe. For example, to find files modified in the last 7 days:

find . -mtime -7

The -7 here means “less than 7 days ago”. It’s a feature I often use to track down recent changes.

Example output:

This lists files modified in the last 7 days. Assuming we have a few:

./documents/report1.docx
./pictures/photo1.jpg
./backup/script.sh

Using size to find files

Ever needed to find large files eating up your disk space? The -size option is your friend. To find files larger than 100MB:

find / -size +100M

Be cautious with searching from / (the root directory); it can take time and might require superuser privileges.

Example output:

This command might return large files like:

/usr/bin/some-large-binary
/home/user/videos/big_video.mp4
/var/log/large-log-file.log

Advanced tricks

The true power of find lies in its ability to combine tests and actions. Let’s explore some advanced uses.

Executing commands on found files

The -exec option allows you to run commands on the files you find. For example, to find all .jpg files and move them to a directory called backup, you’d use:

find . -type f -name '*.jpg' -exec mv {} backup/ \;

Here, {} is a placeholder for each file found, and \; marks the end of the command.

Example output:

There might not be direct output from this command as it’s moving files, but if you list the contents of the backup directory afterwards, you’ll see:

backup/photo1.jpg
backup/vacation.jpg
backup/event.jpg

Combining conditions

You can combine conditions using logical operators. For instance, to find files that are either named foo.txt or larger than 100MB:

find . \( -name foo.txt -o -size +100M \)

The parentheses group conditions, and -o stands for “OR”.

Example output:

This command finds files named foo.txt or files larger than 100M. The output might look like this:

./foo.txt
./largefiles/video.mp4
./data/foo.txt

Here, both conditions are met: there are files named foo.txt and a file larger than 100M (video.mp4).

Searching by file permissions

The find command can search for files with specific permissions, which is incredibly useful for security audits and managing file permissions.

Example

To find files with 777 (read, write, and execute permissions for everyone) permissions:

find . -type f -perm 0777

Example output:

Assuming there are some files set with 777 permissions:

./tmp/scratch.sh
./scripts/run_everywhere.sh

Finding and deleting files

find can also be used to delete files matching certain criteria directly. This feature should be used with caution to avoid accidental deletion.

Example

To find and delete all .tmp files:

find . -type f -name '*.tmp' -delete

Example output:

This command does not produce output unless there are errors. To verify, you can rerun the find command without -delete to see that no .tmp files remain.

Finding files by owner

Locating files owned by a specific user can be particularly helpful in multi-user environments or when managing files transferred between users.

Example

To find all files owned by the user john:

find / -type f -user john

Example output:

Depending on the files owned by john, you might see:

/home/john/report.docx
/home/john/downloads/image.jpg

Finding empty files and directories

Empty files and directories can clutter the system or indicate issues like failed downloads or incorrect script executions.

Example

To find empty files:

find . -type f -empty

To find empty directories:

find . -type d -empty

Example Output for Files:

./logs/empty_log.log
./data/unused.txt

Example Output for Directories:

./unused_folder
./empty_directory

Using find with xargs

While -exec is useful, xargs can be more efficient in some cases, especially when dealing with a large number of files.

Example

To find all .png files and compress them using tar:

find . -type f -name '*.png' | xargs tar -cvzf images.tar.gz

Example output:

This command will compress the found .png files into images.tar.gz and might output:

a ./images/photo1.png
a ./icons/logo.png

My tips

When using find, especially with -exec, it’s a good idea to first run the command without -exec to see what files it matches. This precaution helps avoid unintended actions on files. Also, remember that searching from the root directory / can take a considerable amount of time and might require superuser privileges, so use it judiciously.

Conclusion

The find command in Linux is a powerful tool that goes far beyond simple file searches. Its ability to combine search criteria with actions allows for sophisticated file management and system administration tasks. Whether you’re performing maintenance, security audits, or just trying to locate a lost file, mastering find can significantly enhance your productivity and effectiveness as a Linux user.

You may also like

Leave a Comment

fl_logo_v3_footer

ENHANCE YOUR LINUX EXPERIENCE.



FOSS Linux is a leading resource for Linux enthusiasts and professionals alike. With a focus on providing the best Linux tutorials, open-source apps, news, and reviews written by team of expert authors. FOSS Linux is the go-to source for all things Linux.

Whether you’re a beginner or an experienced user, FOSS Linux has something for everyone.

Follow Us

Subscribe

©2016-2023 FOSS LINUX

A PART OF VIBRANT LEAF MEDIA COMPANY.

ALL RIGHTS RESERVED.

“Linux” is the registered trademark by Linus Torvalds in the U.S. and other countries.