find . -type d
can be used to find all directories below some start point. But it returns the current directory (.
) too, which may be
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
:
!
for portability..
? Throw a coin.long_name
? Use -mindepth
.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]
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
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