How can I recursively find all files in current and subfolders based on wildcard matching in Linux?

To recursively find all files in the current directory and subfolders based on wildcard matching in Linux, use the find command with the -name or -iname (case-insensitive) flag. Here’s how:

Basic Syntax

find [starting-directory] -type f -name "wildcard-pattern"
  • -type f: Restrict results to files (excludes directories).
  • -name "pattern": Case-sensitive wildcard matching.
  • -iname "pattern": Case-insensitive wildcard matching.

Examples

1. Find all .txt files recursively:

find . -type f -name "*.txt"

2. Find .jpg files (case-insensitive):

find . -type f -iname "*.jpg"  # Matches .JPG, .jPg, etc.

3. Find files named app.log in /var/log:

find /var/log -type f -name "app.log"

4. Find files matching a complex pattern (e.g., data_2023*.csv):

find . -type f -name "data_2023*.csv"

Key Notes

  • Wildcards:
  • *: Matches any number of characters (e.g., *.log).
  • ?: Matches a single character (e.g., file_202?.txt).
  • Quotes: Always wrap the pattern in quotes ("*.txt") to prevent shell expansion.
  • Hidden Files: Include . in the pattern to find hidden files (e.g., -name ".*").

Advanced Use Cases

Find and list files with ls-like formatting:

find . -type f -name "*.py" -ls

Find and delete matching files (use with caution!):

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

Find files modified in the last 7 days:

find . -type f -name "*.log" -mtime -7

Alternative: grep with ls (Not Recommended)

While you can use ls -R to list files recursively, it’s less flexible and error-prone for wildcards:

ls -R | grep "\.txt$"  # Lists all .txt files (may break with spaces)

Summary

Use find for reliable, recursive wildcard searches:

find . -type f -name "your-pattern"

Leave a Reply

Your email address will not be published. Required fields are marked *