On Linux find -type d
works to list all sub directories, ignoring files.
However when I run this on a Mac (High Sierra) I get the error: find: illegal option -- t
.
On delving into the googles, I hadn't found any obvious alternative for a command line equivalent except for answers suggesting that I use ls
and parse the output via grep
, or have solutions for GUI apps or for the non command line users (via finder, etc.).
The usecase would be to pipe this output to a fuzzy finder which expects a newline separated list of items. For example I can accomplish this with files and ripgrep
with: rg --files -g "" | fzy
. Ripgrep doesn't seem to support a --folders
option or the like from my cursory browse on the github issue tracker.
On Linux find -type d | fzy
"just works". Up to installing other packages, but I really hoped for something that just comes preinstalled.
I can get away from this with some scripting, but I'd love to hear about a best practice here.
Best Answer
I think your
find
does understand-type d
because this is required by POSIX. However the syntax you used:is not POSIX-compliant, thus not portable. The proper portable syntax is:
Linux versions of
find
will assume./
if you omitpath
. On Macfind
expects something like this:You want
-type
to be a part ofexpression
but yourfind
needspath
or-f path
in its command line arguments. Before it gets one, it tries to interpret other arguments as options, so your-type
is in fact-t -y -p -e
; there is no-t
option defined, thusillegal option -- t
.(Compare this answer).
The solution is simple: specify a
path
explicitly. Mac equivalent of Linuxfind -type d
is:Note this works in Linux as well.