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

How can I do this?



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 '11 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 '11 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 '11 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 '11 at 3:52
  • 1
    find has already filter capabilities – enzotib Dec 11 '11 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. – David Foerster Feb 23 '18 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'? – David Foerster Feb 23 '18 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 '18 at 13:42
  • locate matches glob expressions like /folder/path/*.sql, not regular expressions. – David Foerster Feb 23 '18 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 '18 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) – David Foerster Feb 24 '18 at 1:21

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.