7

When using grep you can search for a specific regex, but only inside of a file. Is there any way, I can search for a folder name?

17

I usually use find:

$ find . -name 'FolderBasename*' -type d

or for more complex queries

$ find . -regex '{FolderRegex}' -type d

As pointed out in the comments if you want case insensitive searches do -iname and -iregex

3
  • 3
    -name doesn't take a regular expression. If you need to match with a regular expression, you probably want -regex or -iregex – Mark Longair Apr 5 '11 at 19:32
  • @Mark You're right - my bad there. I usually only need the supported * and ? (see man find) to get things found. – AlG Apr 5 '11 at 19:37
  • Could you also elaborate on the options. It's an easy online search, but I would still like to know. – SDG Dec 6 '16 at 7:49
7

If you really mean regexp instead of shellglob, you may want to use

find <path> -regex <regex> -type d

eg.

find Code/ -E -regex '(bin|redblack)_tree\.hs' -type d

the option -E turns on extendend regexp, see man find for more.

3

If you are just concerned with matching the name you can simply use '-name' in find.

find <path> -name '<regex>' -type d
1

find is far better but a clunky answer to your question:

ls -l | grep '^d'
1
  • 1
    technically is the only one that actually answered the question as written, even if not as intended. However, it's limited to the folder you're in. May want to adjust so it's recursive with the -R flag on ls. – lilHar May 21 '20 at 7:31
0

Another answer, which works without using regex (and Bash4: shopt -s globstar):

ls **/dirname/ -d

(based on recursive globbing: **/ and matching only folders /*/)

0

Your Answer

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