Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

On a Linux server, I need to find all files with a certain file extension in the current directory and all sub-directories.

Previously, I have always using the following command:

find . -type f | grep -i *.php

However, it doesn't find hidden files, for example .myhiddenphpfile.php. The following finds the hidden php files, but not the non-hidden ones:

find . -type f | grep -i \.*.php

How can I find both the hidden and non-hidden php files in the same command?

share|improve this question
You know that the "re" in "grep" stands for "regular expression", right? I have no clue how either of those command lines are supposed to work... – Ignacio Vazquez-Abrams May 6 '10 at 7:56
up vote 14 down vote accepted


find . -type f -name '*.php'
share|improve this answer
Thanks - and sorry for my stupidity ;-) – Tom May 6 '10 at 8:03

It's better to use iname (case insensitive).

I use this find command to search hidden files:

find /path -type f -iname ".*" -ls

Extracted from:

share|improve this answer

The issue is grep, not the find (try just 'find . -type f' to see what I mean).

If you don't quote the '*' then the shell will expand it - before grep even sees its command line arguments; since the shell doesn't find hidden files by default, you'll have issues.

The reason it's only finding the hidden file is because the shell has already expanded the '*' and so grep is only matching that one file.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.