问题 Mac`find`和Linux`find`之间的区别[关闭]


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

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

在测试中我发现它是 -type 我的Mac上有问题的选项。如果我跑了:

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

它可以工作,但在Linux机器上都可以工作(看似相同)。因此我的问题是,OSX(BSD)之间是否存在显着差异 find 二进制和Linux(GNU?) find 并将我的脚本修改(添加 ./ 一开始的路径)打破我还没有发现的任何东西?


2663
2017-07-09 13:01


起源

有关: stackoverflow.com/questions/752818/... - legoscia
在Linux中,无需提及目录名称或路径。默认情况下,它将采用当前目录。 - reegan vijay
在mac os中指定路径或目录mandotary字段 - reegan vijay


答案:


标准 要求路径(./ 在你的例子中)是强制性的。 find 在MacOS上遵循标准。

GNU find (Linux上可用的那个)允许路径是可选的。如果未指定,则假定当前目录为路径。在Linux上,男人发现说

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

(注意路径是在其中指定的 [...] 表示它是可选的。

指定路径是一种好习惯。


11
2017-07-09 13:08



好的,谢谢,我已经更新了脚本以包含路径,但我不确定我是否遗漏了一些更基本的语法差异。 - GTF
可能存在其他差异,但它们主要是它们支持的选项和测试的差异 - 例如,OS X的发现支持 -Bmin, -Bnewer,和 -Btime 用于检查linux没有的文件创建日期(inode“生成时间”)的测试;另一方面,OS X的发现不支持 -D debugopts 选项。但是如果同一个find命令在没有错误的情况下运行它通常会在两者上做同样的事情...... - Gordon Davisson