在 Mac 上 `find -type d` 的替代方法是什么?

在 Mac 上 `find -type d` 的替代方法是什么?

在 Linux 上find -type d,列出所有子目录,忽略文件。

但是,当我在 Mac(High Sierra)上运行它时,出现错误:find: illegal option -- t

深入研究谷歌后,我没有找到任何明显的替代命令行等效方法,除了建议我使用ls和解析输出的答案grep,或者为GUI应用程序或非命令行用户(通过finder等)提供解决方案。

用例是将此输出通过管道传输到模糊查找器,该查找器需要以换行符分隔的项目列表。例如,我可以使用文件和以下内容实现此目的ripgreprg --files -g "" | fzy。从我在 github 问题跟踪器上的粗略浏览来看,Ripgrep 似乎不支持--folders选项或类似的东西。

在 Linux 上find -type d | fzy“就可以正常工作”。可以安装其他软件包,但我真的希望能安装一些预安装的软件包。

我可以通过一些脚本来解决这个问题,但我很想听听这里的最佳做法。

答案1

我认为你的find 理解-type d,因为这是POSIX 要求。但是您使用的语法:

find -type d

不符合 POSIX 标准,因此不可移植。正确的可移植语法是:

find path -type d

Linux 版本find将假设./如果你省略path。在 Mac 上,find需要一些像这样

find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

您想-type成为其中的一部分,expression但您的find需求path-f path在其命令行参数中。在获得一个参数之前,它会尝试将其他参数解释为选项,因此您的参数-type实际上是-t -y -p -e;没有-t定义选项,因此illegal option -- t

(比较这个答案)。

解决方案很简单:path明确指定。Mac 中与 Linux 对应的方法find -type d是:

find ./ -type d

请注意,这在 Linux 中也有效。

相关内容