【问题标题】:find lacks the option -printf, now what?find 缺少选项 -printf,现在怎么办?
【发布时间】:2010-10-19 15:56:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: macos find printf


    【解决方案1】:

    并不是 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 '

    【讨论】:

    • 出于某种原因,这会在 OS X 10.8.4 上的 iTerm2 中打印数字而不是字符串。相反,dmckee 建议的 MacPorts 的 indutils 包中的 gfind 可以正常工作。
    • 那是因为 %i 打印了 inode。
    • @TylerA。如何打印文件名而不是数字?
    • @mesqueeb man stat 为您提供不同的格式值。看起来用%N 替换%i 会给你文件名,例如find . -print0 | xargs -0 stat -f '%N '
    • %N 打印文件完整路径,如果我只想要文件的基本名称怎么办?
    【解决方案2】:

    Ubuntu 附带 GNU version of find,它比 Mac OS X 的 find 功能更强大,后者是 BSD 血统。

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

    【讨论】:

      【解决方案3】:

      好吧,ephemientbendin 找到了原因。

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

      【讨论】:

      • 您也可以使用Homebrew 安装它:brew install findutils 然后使用gfind 而不是find
      • @3zzy 您的路径是否包含 GNU 版本?它是在系统版本之前还是之后?使用 gfind 可能会强制使用 GNU 版本。
      【解决方案4】:

      或者,你也可以

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

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

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

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

      【讨论】:

      • -type-exec stat 代表什么??
      【解决方案5】:

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

      【讨论】:

      • 这也适用于 FreeBSD 和 FreeBSD Jails。谢谢。
      • t h e_re a l_m v p
      猜你喜欢
      • 2013-09-19
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 2011-06-01
      • 2021-05-01
      • 2016-12-04
      • 2023-04-06
      • 2011-07-11
      相关资源
      最近更新 更多