How to Search Files by Name or Extension Using find Command

Many times, we find ourselves in a situation where we need to search for multiple files with different extensions, which is a common scenario for many Linux users, especially when working within the terminal.

There are several Linux utilities that we can use to locate files on the file system, but finding files with multiple extensions can sometimes prove tricky and require specific commands.

One of the many utilities for locating files on a Linux file system is the find utility. In this how-to guide, we will walk through a few examples of using find to help us locate multiple filenames at once.

Before we dive into the actual commands, let us look at a brief introduction to the Linux `find` utility.

Introduction to the find Command

The find command is a versatile tool used to search for files and directories in a Linux file system.

The simplest and most general syntax of the find utility is as follows:

find directory options [expression]

Here’s a brief overview of its components:

  • directory: The directory where you want to start the search.
  • options: Additional parameters to refine your search.
  • expression: Conditions to match files or directories.

Let us proceed to look at some examples of find command in Linux.

Searching for Multiple File Extensions

To find files with different extensions, you can use the -name option combined with the -o (OR) operator, which allows you to specify multiple patterns to match different file types.

Let’s go through some examples to illustrate how this works.

Example 1: Finding .sh and .txt Files

Assuming that you want to find all files in the current directory with .sh and .txt file extensions, you can do this by running the command below:

find . -type f \( -name "*.sh" -o -name "*.txt" \)
Find .sh and .txt Extension Files in Linux
Find .sh and .txt Extension Files in Linux

Interpretation of the command above:

  • . means the current directory
  • -type option is used to specify file type and here, we are searching for regular files as represented by f
  • -name option is used to specify a search pattern in this case, the file extensions
  • -o means “OR”

It is recommended that you enclose the file extensions in a bracket, and also use the \ ( back slash) escape character as in the command.

Example 2: Finding .sh, .txt, and .c Files

To find three filenames with .sh, .txt and .c extensions, issues the command below:

find . -type f \( -name "*.sh" -o -name "*.txt" -o -name "*.c" \)
Find Multiple File Extensions in Linux
Find Multiple File Extensions in Linux

Example 3: Finding .png, .jpg, .deb, and .pdf Files

Here is another example where we search for files with .png, .jpg, .deb and .pdf extensions:

find /home/aaronkilik/Documents/ -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.deb" -o -name ".pdf" \)
Find More than 3 File Extensions in Linux
Find More than 3 File Extensions in Linux

Example 4: Using Wildcards to find

You can also use wildcards to match patterns. For instance, to find all files with .log, .txt, or .cfg extensions:

find /var/log/ -type f \( -name "*.log" -o -name "*.txt" -o -name "*.cfg" \)

Example 5: Finding Files with Complex Patterns

Suppose you want to find files that end with .tar.gz or .zip:

find /path/to/search/ -type f \( -name "*.tar.gz" -o -name "*.zip" \)

When you critically observe all the commands above, the little trick is using the -o option in the find command, it enables you to add more filenames to the search array, and also know the filenames or file extensions you are searching for.

Conclusion

In this guide, we have explored how to use the find command to search for files with multiple extensions. By using the -name option in combination with the -o operator, you can easily locate files that match various patterns in a single command.

To dive deeper into the find command and its many capabilities, you can refer to the find manual page by typing man find in your terminal.

man find

Feel free to experiment with these commands and adapt them to your specific needs!

Hey TecMint readers,

Exciting news! Every month, our top blog commenters will have the chance to win fantastic rewards, like free Linux eBooks such as RHCE, RHCSA, LFCS, Learn Linux, and Awk, each worth $20!

Learn more about the contest and stand a chance to win by sharing your thoughts below!

Aaron Kili
Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge.

Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Join the TecMint Weekly Newsletter (More Than 156,129 Linux Enthusiasts Have Subscribed)
Was this article helpful? Please add a comment or buy me a coffee to show your appreciation.

13 Comments

Leave a Reply
  1. Very helpful post, it helped me to remove malicious files from 20 WordPress sites, it was hard to find and manually delete them.

    Reply
    • @Karl

      You can use a similar command like this:

      $ find . -newerct "1 Dec 2018" ! -newerct "4 Dec 2018" -ls
      

      For more information, see the find man page.

      Reply
    • @vlad

      That works but it may not be efficient and reliable enough for the job, especially when you want to search in several locations.

      Reply
    • ls” works only for current directory content listing. It won’t search files recursively in any sub directories if available. So, we need to use find command only which will search in sub-directories also.

      Reply
  2. Another way is using -regextype and -iregex switch, fore example:

    $ find . -regextype posix-egrep -iregex '.*\.(xml|txt)$' -type f

    The above command find all files with xml or txt extension.

    Reply
    • @Libreman,

      Thanks for the great tip, If find it really very useful commandline trick to achieve the same results, hope it will be useful to others..

      Reply

Got Something to Say? Join the Discussion...

Thank you for taking the time to share your thoughts with us. We appreciate your decision to leave a comment and value your contribution to the discussion. It's important to note that we moderate all comments in accordance with our comment policy to ensure a respectful and constructive conversation.

Rest assured that your email address will remain private and will not be published or shared with anyone. We prioritize the privacy and security of our users.