我还没有找到 Mac 的 find 没有选项 -printf 的原因。苹果通常决定去掉与其他命令不正交的选项?
在没有 coreutils的情况下,如何在 Mac 中达到与以下命令相同的结果?
find . -printf "%i \n" // command in Ubuntu
并不是 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)
MAC OS X find binary 不支持 -printf 命令。brew install findutils
在你的 Mac 上安装。此安装gfind
带有-printf
选项。
我要补充一点,如果你需要的话,没有什么能阻止你安装 GNU find (来自findutils )。如果你使用fink有一个findutils
包。MacPorts也有。
或者,你可以只是
find . -type f -exec stat -f "%z %N" {} \;
当然,这不是你在 linux 上做同样事情的方式,但适用于 MacOS
find . -type f -exec stat -c "%s %N" {} \;
在 linux 上产生类似(不一样,但接近)的输出。
Ubuntu 附带了GNU 版本的 find,它比 Mac OS X 的 find 具有更多功能,后者是BSD血统。
事实上,大多数 Ubuntu 的用户级实用程序都来自 GNU 项目。(因此您有时会听到基于 Linux 的系统被称为“GNU/Linux”。)