Sen*_*jai 1 bash command-line macos
在 Linux 上find -type d工作列出所有子目录,忽略文件。
但是,当我在 Mac (High Sierra) 上运行它时,出现错误:find: illegal option -- t.
在深入研究谷歌时,除了建议我使用ls和解析输出的答案外,我还没有找到任何明显的命令行替代grep方案,或者为 GUI 应用程序或非命令行用户提供解决方案(通过 finder 等) .)
用例是将此输出通过管道传输到模糊查找器,该查找器需要换行符分隔的项目列表。例如,我可以使用文件和ripgrep:rg --files -g "" | fzy. Ripgrep 似乎不支持--folders我在 github 问题跟踪器上粗略浏览的选项等。
在 Linux 上find -type d | fzy“正常工作”。直到安装其他软件包,但我真的希望预先安装一些东西。
我可以通过一些脚本来解决这个问题,但我很想听听这里的最佳实践。
我认为您find 确实理解,-type d因为这是POSIX所要求的。但是您使用的语法:
find -type d
Run Code Online (Sandbox Code Playgroud)
不符合 POSIX,因此不可移植。正确的可移植语法是:
find path -type d
Run Code Online (Sandbox Code Playgroud)
的Linux版本find将假设./,如果你省略path。在 Mac 上find期望是这样的:
find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
Run Code Online (Sandbox Code Playgroud)
您想-type成为expression您的find需求path或其-f path命令行参数的一部分。在它得到一个之前,它试图将其他参数解释为选项,所以你-type实际上是-t -y -p -e; 没有-t定义选项,因此illegal option -- t。
(比较这个答案)。
解决方案很简单:明确指定一个path。相当于 Linux 的 Macfind -type d是:
find ./ -type d
Run Code Online (Sandbox Code Playgroud)
请注意,这也适用于 Linux。
| 归档时间: |
|
| 查看次数: |
592 次 |
| 最近记录: |