How to exclude this / current / dot folder from find "type d"

ShellDirectoryFind

Shell Problem Overview


find . -type d

can be used to find all directories below some start point. But it returns the current directory (.) too, which may be undesired. How can it be excluded?

Shell Solutions


Solution 1 - Shell

Not only the recursion depth of find can be controlled by the -maxdepth parameter, the depth can also be limited from “top” using the corresponding -mindepth parameter. So what one actually needs is:

find . -mindepth 1 -type d

Solution 2 - Shell

POSIX 7 solution:

find . ! -path . -type d

For this particular case (.), golfs better than the mindepth solution (24 vs 26 chars), although this is probably slightly harder to type because of the !.

To exclude other directories, this will golf less well and requires a variable for DRYness:

D="long_name"
find "$D" ! -path "$D" -type d

My decision tree between ! and -mindepth:

  • script? Use ! for portability.
  • interactive session on GNU?
    • exclude .? Throw a coin.
    • exclude long_name? Use -mindepth.

Solution 3 - Shell

I use find ./* <...> when I don't mind ignoring first-level dotfiles (the * glob doesn't match these by default in bash - see the 'dotglob' option in the shopt builtin: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html).

eclipse tmp # find .
.
./screen
./screen/.testfile2
./.X11-unix
./.ICE-unix
./tmux-0
./tmux-0/default

eclipse tmp # find ./*
./screen
./screen/.testfile2
./tmux-0
./tmux-0/default

Solution 4 - Shell

Well, a simple workaround as well (the solution was not working for me on windows git bash)

find * -type d

It might not be very performant, but gets the job done, and it's what we need sometimes.

[Edit] : As @AlexanderMills commented it will not show up hidden directories in the root location (eg ./.hidden), but it will show hidden subdirectories (eg. ./folder/.hiddenSub). [Tested with git bash on windows]

Solution 5 - Shell

Pipe it to sed. Don't forget the -r that extend regular expression.

find . -type d | sed -r '/^\.$/d'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMatthias RongeView Question on Stackoverflow
Solution 1 - ShellMatthias RongeView Answer on Stackoverflow
Solution 2 - ShellCiro Santilli Путлер Капут 六四事View Answer on Stackoverflow
Solution 3 - ShellMilos IvanovicView Answer on Stackoverflow
Solution 4 - ShellStackHolaView Answer on Stackoverflow
Solution 5 - ShellClementView Answer on Stackoverflow