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?

  • 1
    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


find . -type f -name '*.php'
  • Any recursive option? This doesn't seem to be going into subdirectories where I ran the command. I don't know what directory the file is in. – jDub9 Feb 5 '20 at 22:39
  • 1
    What if I want both files and directories that may be hidden or not? – Rodrigo Mar 29 '20 at 17:34

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: http://www.sysadmit.com/2016/03/linux-ver-archivos-ocultos.html


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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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