【发布时间】:2010-10-19 15:56:20
【问题描述】:
我还没有找到 Mac 的 find 没有选项 -printf 的原因。 Apple 通常会决定去掉与其他命令不正交的选项?
在没有 coreutils 的情况下,如何在 Mac 中达到与以下命令相同的结果?
find . -printf "%i \n" // command in Ubuntu
【问题讨论】:
我还没有找到 Mac 的 find 没有选项 -printf 的原因。 Apple 通常会决定去掉与其他命令不正交的选项?
在没有 coreutils 的情况下,如何在 Mac 中达到与以下命令相同的结果?
find . -printf "%i \n" // command in Ubuntu
【问题讨论】:
并不是 Apple 删除了选项,而是 OS X 的 UNIX 基础大多(迂回地)从 FreeBSD 派生,其中许多部分可以追溯到最初的 UNIX……而不是 GNU 实用程序,后者是- 添加了许多功能的实现。
在这种情况下,FreeBSD's find(1) 不支持-printf,所以我也不希望 OS X 支持。相反,这应该适用于 BSD-ish 系统:
find . -print0 | xargs -0 stat -f '%i '
不过,它在 GNU 用户态系统上会失败,因为 xargs(1) 和 stat(1) 的行为是不同的,所以你会写 xargs -0 -r stat -c '%i '。
【讨论】:
indutils 包中的 gfind 可以正常工作。
man stat 为您提供不同的格式值。看起来用%N 替换%i 会给你文件名,例如find . -print0 | xargs -0 stat -f '%N '
Ubuntu 附带 GNU version of find,它比 Mac OS X 的 find 功能更强大,后者是 BSD 血统。
事实上,大多数 Ubuntu 的用户级实用程序都来自 GNU 项目。 (因此您有时会听到基于 Linux 的系统被称为“GNU/Linux”。)
【讨论】:
或者,你也可以
find . -type f -exec stat -f "%z %N" {} \;
当然,这不是您在 linux 上做同样事情的方式,但适用于 MacOS
find . -type f -exec stat -c "%s %N" {} \;
在 linux 上产生类似(不相同,但接近)的输出。
【讨论】:
-type 和 -exec stat 代表什么??
MAC OS X find binary 不支持 -printf 命令。在你的 Mac 上安装 brew install findutils。此安装 gfind 和 -printf 选项。
【讨论】: