I want to search for all files with the .sql extension in folders and sub-folders (recursive).

How can I do this?

4 Answers 4



find $directory_name -name \*.sql

For example

find / -name \*.sql


find ~ \*.sql

(where ~ equates to /home/your_username/), or...

find /usr/local/share/ \*.sql

and so forth.


Run this in the command line:

cd / && find | grep '\.sql$'

Change '/' to the directory you want to search.

The find command is able to accomplish the task without grep (using extra options), but I find the above usage more convenient.

In order, the above command:

  1. Changes the current directory to the root directory (cd /)
  2. Lists all files and directories at and below the current directory (find)
  3. Filters the files and directories for anything that ends with '.sql' (| grep '\.sql$')
  • thanks, can you explain it? your using grep and passing its output to find?
    – Blankman
    Dec 11, 2011 at 1:50
  • Vice versa, actually. I'm using find and passing its output to grep. I added a more detailed explanation above.
    – Barbarrosa
    Dec 11, 2011 at 2:00
  • would this work on a Mac also? I tried 'find | grep '\.sql$' and it outputted the usage help info.
    – Blankman
    Dec 11, 2011 at 3:14
  • find is a powerful tool and you really do not need to pipe the output to grep. This is a nice link - content.hccfl.edu/pollock/unix/findcmd.htm
    – Panther
    Dec 11, 2011 at 3:52
  • 1
    find has already filter capabilities
    – enzotib
    Dec 11, 2011 at 12:04

I know that this is an old post, but i am pretty new at this and i've found an easy way to find all files of a certain extension in a directory and its children subdirectories. Well you first navigate to the parent Directory then find . -name '*.sql' and that will find you all files with .sql extension in the directories and its subdirectories.

In my case i wanted to delete all .xml files in the directory and its subdirectories, so what i did more is that i added remove as in here find . -name '*.xml' | xargs rm

Hope this help someone :)

  • 2
    find understands the -delete command. No need to involve rm. Or you can use the -exec command to invoke it directly without the detour through a pipe and xargs. Feb 23, 2018 at 14:41
locate -br \\.sql$ | egrep '^/folder/path/'

If it is not installed, then previously install it with:

sudo apt install mlocate
  • This requires an up-to-date mlocate.db instance which is not set up out-of-the box in Ubuntu (I blieve). Also, why not simply locate '/folder/path/*.sql'? Feb 23, 2018 at 11:45
  • @DavidFoersterI I tried as you specified but it doesn't work, I guess regex in locate has some different setting from regex used in egrep
    – Vzzarr
    Feb 23, 2018 at 13:42
  • locate matches glob expressions like /folder/path/*.sql, not regular expressions. Feb 23, 2018 at 14:37
  • sorry, but from man locate I get -r, --regexp REGEXP - Search for a basic regexp REGEXP so I assumed it was a regex. Anyway I tried your "global expression" but doesn't work, I'm sorry
    – Vzzarr
    Feb 23, 2018 at 15:19
  • 1
    Please read at least the first few sentences of the description before you start to cherry-pick from the option synposis: “If --regex is not specified, PATTERNs can contain globbing characters.” (source) Feb 24, 2018 at 1:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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