【问题标题】:Find all PPC libraries, binaries and applications in Snow Leopard在 Snow Leopard 中查找所有 PPC 库、二进制文件和应用程序
【发布时间】:2009-09-10 16:53:46
【问题描述】:

您对如何编写一个脚本来搜索我的系统中的应用程序、库(即 /usr/local/lib 和 /usr/local)以及仅限 PPC 的二进制文件有任何建议吗?

我将系统从 PPC Mac 升级到运行 Leopard 10.5 的 Intel Mac。然后我升级到了 Rosetta 不附带的 Snow Leopard 10.6。所以我现在才意识到我系统上遗留的所有旧的 PPC 东西!

【问题讨论】:

    标签: macos osx-snow-leopard


    【解决方案1】:

    file 命令可以检测文件中可用的二进制类型。

    file -b /usr/bin/atrm
    setuid Mach-O universal binary with 3 architectures
    /usr/bin/atrm (for architecture x86_64): Mach-O 64-bit executable x86_64
    /usr/bin/atrm (for architecture i386): Mach-O executable i386
    /usr/bin/atrm (for architecture ppc7400): Mach-O executable ppc
    

    因此,这只是适当地使用查找和过滤的问题。这样的事情应该会找到系统上所有具有 PPC 子部分的二进制文件。

    find / -perm -u+x ! -type d -exec file {} \; | grep ppc | awk '{print $1}'
    

    仅 PPC 有点困难。为此,您需要执行三个命令在 /tmp 中创建 2 个文件,第一个包含 PPC 文件列表,第二个包含 32 位或 64 位 x86 文件列表。方便的是,'ppc' 匹配 ppc 和 ppc64。

    find / -perm -u+x ! -type d -exec file {} \; | grep ppc | awk '{print $1}' > /tmp/ppc
    find / -perm -u+x ! -type d -exec file {} \; | grep i386 | awk '{print $1}' > /tmp/x86
    find / -perm -u+x ! -type d -exec file {} \; | grep x86_64 | awk '{print $1}' >> /tmp/x86
    

    然后,稍微排序/uniq(只对路径进行排序并确保每个二进制文件只列出一次):

    cat /tmp/x86 | sort | uniq > /tmp/x86.filtered
    cat /tmp/ppc | sort | uniq > /tmp/ppc.filtered
    

    然后,使用 diff(以及更多处理)来生成仅 ppc 的文件列表:

    diff /tmp/ppc.filtered /tmp/x86.filtered | grep -e '<' | awk '{print $2}' | perl -p -e 's/:$//'
    

    最终结果应该是只包含 ppc 可执行 mach-o 部分的文件列表。我建议在核对任何内容之前验证列表。

    一些注意事项:

    以上所有操作都在终端中完成。

    这只是一个技巧;它在我的系统上工作得很好,我很高兴你问,因为我想知道同样的。但这只是一个黑客。

    【讨论】:

    • 以下似乎只在一行中工作,而不遍历整个文件层次结构: mdfind -0 'kMDItemContentTypeTree == "public.executable"' | xargs -0 -n 1 sh -c 'lipo="$(lipo -info "$1" 2>/dev/null)";如果 [[ "$lipo" == ::*ppc* && "$lipo" != ::*i386* && "$lipo" != ::*x86_64* ]];然后回显“$1”;鱼
    • 这并不让我感到惊讶。将上述所有内容复制/粘贴到 my shell 中。 您的 shell 可能会有所不同。 :) 我正在使用 tcsh,顺便说一句。
    • 由于file 为具有多种架构的文件显示“for architecture...”,因此利用它来制作一个易于理解的单行命令,甚至适用于最新版本的 OS X喜欢 10.11:find / -perm -u+x ! -type d -exec file {} \; | grep -v 'for arch' | grep ppc | cut -d: -f1
    【解决方案2】:

    要查找应用程序,您可以使用 System Profiler(在 Lion 中称为系统信息)。

    在侧边栏中的“软件”下查看并选择“应用程序”...然后等待很长时间以收集信息。

    【讨论】:

    • 澄清一下:然后您可以按“种类”对列表进行排序,这会将所有 PPC 应用程序一起列出。
    • 正确。我忘记了那一步。 :-)
    • 在 Mavericks 及以后也称为“系统信息”。
    【解决方案3】:

    根据 Kevin Ballard 的回答,这个适用于山狮:

    mdfind -0 'kMDItemContentTypeTree == "public.executable"' | xargs -0 -n 1 sh -c 'lipo="$(lipo -info "$1" 2>/dev/null)"; if [[ "$lipo" == *ppc* && "$lipo" != *i386* && "$lipo" != *x86_64* ]]; then echo "$1"; fi' sh
    

    【讨论】:

      【解决方案4】:

      另请注意,Rosetta 附带 10.6 - 它只是可选安装之一。检查您用来安装它的 DVD。

      【讨论】:

      • 如果您在尝试运行 PPC-app 时选择安装它,它也可以从 Internet 安装它。
      【解决方案5】:

      事实上,当您尝试启动其中一个应用程序时,它应该会要求您安装它。

      【讨论】:

        猜你喜欢
        • 2010-11-29
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多