Mac的“find”和Linux的“find”有何不同?

14

作为应用程序构建过程的一部分,我继承了一个脚本。在构建服务器(Ubuntu Precise)上运行时它可以正常工作,但是在我的Mac上运行时出现“非法选项--t”的错误。存在问题的命令很简单,只是调用了find

find -type f -not -path [...]

经过测试,我发现在我的Mac上,-type选项存在问题。如果我运行以下命令:

find ./ -type f -not -path [...]

这个脚本在Linux系统上可以正常运行,但是我想知道OSX(基于BSD)的find二进制文件和Linux(基于GNU?)的find之间有没有重大差异。如果我在脚本中添加./路径前缀,是否会破坏其他功能而我还没有发现呢?


相关链接:https://dev59.com/uHRB5IYBdhLWcg3wAjJH - legoscia
在Linux中,不需要提及目录名称或路径。默认情况下,它将使用当前目录。 - reegan vijay
在Mac OS中,指定路径或目录是必填字段。 - reegan vijay
1个回答

13

根据标准,路径(在您的示例中为./)是必需的。在MacOS上,find遵循标准。

GNU find(可用于Linux的find)允许路径是可选的。如果未指定,则假定当前目录为路径。在Linux上,man find 说

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

(请注意,路径是在方括号[...]中指定的,表示它是可选的。

最好指定路径。

)


好的,谢谢。我已经更新了脚本以包含路径,但我不确定是否还有一些更基本的语法差异。 - GTF
1
可能存在其他差异,但它们大多是在支持的选项和测试方面有所不同。例如,OS X 的 find 支持 -Bmin-Bnewer-Btime 测试,用于检查文件创建日期(inode“birth time”),而 Linux 没有;另一方面,OS X 的 find 不支持 -D debugopts 选项。但是,如果相同的 find 命令在两个系统上都能正常运行,则通常会执行相同的操作... - Gordon Davisson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接