64

我还没有找到 Mac 的 find 没有选项 -printf 的原因。苹果通常决定去掉与其他命令不正交的选项?

在没有 coreutils的情况下,如何在 Mac 中达到与以下命令相同的结果?

find . -printf "%i \n"         // command in Ubuntu
4

5 回答 5

57

并不是 Apple 删除了选项,而是 OS X 的 UNIX 基础大多(迂回地)从 FreeBSD 派生,其中许多部分可以追溯到最初的 UNIX……而不是 GNU 实用程序,后者是用添加了许多功能。

在这种情况下,FreeBSDfind(1)不支持-printf,所以我也不希望 OS X 支持。相反,这应该适用于 BSD-ish 系统:

find . -print0 | xargs -0 stat -f '%i '

但是,它会在 GNU-userland 系统上失败,因为你会在其中编写,xargs -0 -r stat -c '%i '因为行为不同。xargs(1)stat(1)

于 2009-04-15T17:41:15.670 回答
38

MAC OS X find binary 不支持 -printf 命令。brew install findutils在你的 Mac 上安装。此安装gfind带有-printf选项。

于 2015-08-30T05:39:58.573 回答
20

嗯,ehemientbendin确定了原因。

我要补充一点,如果你需要的话,没有什么能阻止你安装 GNU find (来自findutils )。如果你使用fink有一个findutilsMacPorts

于 2009-04-15T18:17:47.987 回答
7

或者,你可以只是

find . -type f -exec stat -f "%z %N" {} \;

当然,这不是你在 linux 上做同样事情的方式,但适用于 MacOS

find . -type f -exec stat -c "%s %N" {} \;

在 linux 上产生类似(不一样,但接近)的输出。

于 2010-08-06T15:58:06.550 回答
3

Ubuntu 附带了GNU 版本的 find,它比 Mac OS X 的 find 具有更多功能,后者是BSD血统。

事实上,大多数 Ubuntu 的用户级实用程序都来自 GNU 项目。(因此您有时会听到基于 Linux 的系统被称为“GNU/Linux”。)

于 2009-04-15T17:44:30.810 回答