使用 Python 识别 Mac OS X 中的包目录

2023-12-27

Mac OS X Finder 使用“包”的概念使某些文件夹的内容对用户不透明。我在用着os.walk()枚举目录树,并且我想跳过对应用程序包等包的枚举。

The mdls命令行实用程序可用于检查是否com.apple.package在里面kMDItemContentTypeTree属性。是检测文件夹是否是要放入的包的唯一/最佳方法os.system并使用mdls在检测到操作系统确实是darwin之后?

顺便说一句,这个解决方案似乎依赖于我理解的 Spotlight 元数据from文件/目录本身。这让我想知道是否有一种方法可以检查目录是否是外部的包mdls。也许我错过了一些东西。


OS X 软件包(和捆绑包) http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html/通常由它们的扩展名来定义。只需创建一个目录.app扩展以查看它在 Finder 中显示为(损坏的)应用程序。

The 官方文档 http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFBundles/AboutBundles/AboutBundles.html列出了以下定义捆绑包的方法:

如果满足以下任一条件,则 Finder 会将目录视为包:

  • 该目录具有已知的文件扩展名:.app、.bundle、.framework、.plugin、.kext 等。
  • 该目录具有一些其他应用程序声称代表包类型的扩展名;请参阅“文件包”。
  • 该目录已设置其包位。

指定包的首选方法是为包目录提供已知的文件扩展名。在大多数情况下,Xcode 通过提供应用正确扩展名的模板来为您处理此问题。您所要做的就是创建一个适当类型的 Xcode 项目。

检测包的最简单方法是检测这些扩展。快速而肮脏的方法是简单地使用上述文档作为指南来查找硬编码的扩展列表。

下一步是查询操作系统是否给定的扩展已注册为文档包。看如何检查 Finder 是否将具有给定扩展名的目录显示为包? https://stackoverflow.com/questions/16933733/how-to-check-whether-directories-with-a-given-extension-are-shown-by-the-finder

要检测目录上的包位,您必须使用xattr library https://pypi.python.org/pypi/xattr检索u'com.apple.FinderInfo'键,然后使用Finder.h标头信息 http://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-8A428/Finder.h对返回的二进制数据进行解码;这kHasBundle标志为 0x2000:

attrs = xattr.getxattr('/path/to/dir', u'com.apple.FinderInfo')
ispackage = bool(ord(attrs[8]) & 0x20)  # I *think* this is correct; works for hidden dirs and & 0x40
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 识别 Mac OS X 中的包目录 的相关文章

  • c++11 正则表达式比 python 慢

    嗨我想了解为什么以下代码使用正则表达式进行分割字符串分割 include
  • 使用 rbenv 在 MacOS 上安装 Ruby 2.6.0 失败

    我在 Mojave 上有一台 Mac 它无法安装开发所需的一些基本内容 rbenv install 2 6 0 Downloading openssl 1 1 1d tar gz gt https dqw8nmjcqpjn7 cloudfr
  • 如何在anaconda python 3.6上安装tensorflow

    我使用 anaconda 包安装了新版本的 python 3 6 但是我无法安装张量流 总是收到这样的错误 tensorflow gpu 1 0 0rc2 cp35 cp35m win amd64 whl 在此平台上不受支持 如何在 ana
  • 让 Django 提供可下载文件

    我希望网站上的用户能够下载路径被遮挡的文件 因此无法直接下载它们 例如 我希望 URL 是这样的 http example com download f somefile txt 在服务器上 我知道所有可下载的文件都位于该文件夹中 home
  • Python 正则表达式从文本中提取域

    我有以下正则表达式 r a zA Z0 9 a zA Z0 9 61 a zA Z0 9 a zA Z 2 6 当我将其应用于文本字符串时 比方说 这是 www website1 com 这是 website2 com 我得到 www we
  • 绘制对数轴

    我想使用 matplotlib 绘制一张带有一个对数轴的图 我一直在阅读文档 但无法弄清楚语法 我知道这可能很简单 scale linear 在情节争论中 但我似乎无法正确理解 示例程序 import pylab import matplo
  • 如何将数据从 JavaScript 发送到 Python

    我正在 jinja2 和 python2 7 上使用 GAE 进行 Web 开发 我可以从Python获取数据 但我无法将数据从 JavaScript 发送到 Python 这是 JavaScript 代码 function toSave
  • 为什么 pandas.DataFrame.update 会更改更新后的数据帧的数据类型?

    出于显而易见的原因 我想在更新后将列的数据类型保留为 int 有什么想法为什么这不能按预期工作吗 import pandas as pd df1 pd DataFrame a 1 b 2 c foo a 3 b 4 c baz df2 pd
  • python:numpy 运行脚本两次

    当我将 numpy 导入到 python 脚本中时 该脚本会执行两次 有人可以告诉我如何阻止这种情况 因为我的脚本中的所有内容都需要两倍的时间 这是一个例子 usr bin python2 from numpy import print t
  • LogRecord 没有预期的字段

    在使用 logging 模块的Python中 文档承诺LogRecord实例将具有许多属性 这些属性在文档中明确列出 然而 情况似乎并不总是如此 当我不使用日志记录模块的 basicConfig 方法时 下面的程序显示属性 asctime
  • 在 Python 中通过网络发送对象的最佳方式是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我需要通过网络发送对象 我将使用 Twisted 并且我刚刚开始查看它的文档 据我所知 python实现套接字的唯一方式是通过文本 那么我如何使
  • 在解析器/子解析器的开头使用 argparse.REMAINDER

    我想实现一个 arg 解析器 它允许我将单元测试作为子命令之一运行 盲目地将参数传递给 unittest main 例如 foo py unittest args to pass to unittest main 以及其他子命令 foo p
  • Python:Factory Boy 生成对象创建时指定长度的列表

    我正在尝试使用 Factoryboy 在创建时指定长度的对象中创建一个列表 我可以创建列表 但由于提供的长度 大小的惰性性质 每次尝试创建具有指定长度的列表都会导致问题 这是我到目前为止所拥有的 class FooFactory facto
  • 启动客户端时,代码要求提供电话/机器人令牌

    使用 Telethon 库运行我的第一个代码时 它要求提供机器人令牌 这是实际的代码 from telethon import TelegramClient events sync api id 1234567 api hash xxxxx
  • 如何仅在按下某个键时触发鼠标单击?在Python中

    我想制作一个程序 或者当我单击某个键时 鼠标会自动单击 只要我单击该键 如果我不单击该键 它就会停止 我不希望只在触摸按键一次时才发生点击 而是只要按住按键就发生点击 也可以像雷蛇突触鼠标一样按下鼠标左键触发点击 任何想法 EDIT 1 这
  • 使用 Python 获取 Youtube 数据

    我正在尝试学习如何分析网络上可用的社交媒体数据 我从 Youtube 开始 from apiclient errors import HttpError from outh2client tools import argparser fro
  • Python struct.pack() 'struct.error: bad char in struct format' 尝试保存字节顺序时

    我正在尝试打包一个字符串和字符串的长度 fmt
  • 为程序员设置 Mac [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在不同进程之间共享列表?

    我有以下问题 我编写了一个函数 它将列表作为输入 并为列表中的每个元素创建一个字典 然后我想将这本字典附加到一个新列表中 这样我就得到了一个字典列表 我正在尝试为此生成多个进程 我的问题是 我希望不同的进程访问由其他进程更新的字典列表 例如
  • 我可以以某种方式“编译”一个Python脚本以在没有安装Python的PC上运行吗?

    所以我有一个Python脚本 myscript py 我是这样执行的 python D myscript py 但是 我必须安装 Python 并将其包含在PATH使其工作的环境变量 是否有可能以某种方式将 Python 可执行文件与 Py

随机推荐

  • 在哪里存储密码?

    我正在编写一个 Android 密码管理器应用程序 我想将主密码存储在某个地方 但我不知道在哪里 我是否应该使用我选择的硬编码密码对用户提供的主密码进行加密 然后将其存储到数据库中 或者我应该做点别的什么 您永远不应该存储未加密的密码 对于
  • 默认加载哪些 ruby​​ 模块?

    直到最近 我还认为所有标准模块 那些可以在http ruby doc org stdlib http ruby doc org stdlib 默认情况下不加载 也就是说 您必须要求您将要使用的每一个 但从内容来看 确实有一些是被加载的 LO
  • 删除网格视图选项

    如何删除 显示分组依据框 和 删除此列 GridView菜单 当我去参加活动时 没有 ShowGridMenu 事件 所以对我不起作用 Use the GridView PopupMenuShowing http documentation
  • Powershell:无法与 .Net 程序集中存储的表单交互

    我只是想学习这个东西 并且将来想在我的一个项目中使用它 我有一个带有简单文本框的小表单 存储在 Net dll C 中 这是我在这个 dll 中的类 其中包含与此表单交互的方法 using System using System Colle
  • 按 HSV/HSB 对颜色列表进行排序

    我希望按 HSV HSB 值对很长的颜色列表进行排序 我想按色调 周六 亮度对它们进行排序 实际上 我需要的是一种方法来根据 HSV 的顺序判断一种颜色是出现在 之前 还是 之后 因为我只是要在 Java 中创建一个compareTo 并使
  • 将内容部署到多个服务器 (EC2)

    我一直在开发基于云 AWS EC2 的 PHP Web 应用程序 当涉及到使用多个服务器 全部在 AWS 弹性负载均衡器下 时 我遇到了一个问题 在一台服务器上 当我上传最新文件时 它们会立即在整个应用程序中投入使用 但当使用多个服务器时
  • django.core.exceptions.ImproperlyConfigured:加载 MySQLdb 模块时出错:

    我正在关注 django 教程 很多人都问过这个问题 但我认为我的情况有点独特 因为安装 python mysql 后 当我尝试执行 python manage pysyncdb 时 我仍然收到此错误 我在 virtualenv 中 因为我
  • 从数组中选取随机字符串

    我如何从数组中随机选择一个字符串 但不选择相同的字符串两次 string names image1 png image2 png image3 png image4 png image5 png 这可能吗 我正在考虑使用 return st
  • 从指向某个成员的指针获取指向对象的指针

    假设有一个结构 struct Thing int a bool b 我得到一个指向成员的指针b该结构的 例如某个函数的参数 void some function bool ptr Thing thing 如何获得指向包含对象的指针 最重要的
  • grunt 任务完成后运行命令?

    我想要运行命令 https stackoverflow com questions 10456865 running a command in a grunt task but after任务在咕噜声中完成 uglify compile o
  • 如果实现 __getattribute__ 有没有办法访问形式参数

    好像 getattribute 只有 2 个参数 self name 然而 在实际的代码中 我拦截的方法实际上带有参数 无论如何可以访问这些参数吗 Thanks Charlie 获取属性 只是返回所请求的属性 如果是方法 则返回 call
  • 从其他进程读取和写入

    我希望能够从另一个进程的内存中读取和写入 我调用了这些函数Readprocessmemory and WriteProcessmemory from Kernel32 dll我用了GetProcessByName 函数来查找进程 这样就成功
  • 如何从 Rails 控制台使用 Devise 登录用户?

    加载Rails控制台后 我应该如何登录用户 Devise 提供了一个可以在测试中使用的测试助手 我尝试在控制台中使用 gt gt include Devise TestHelpers gt gt helper sign in User fi
  • 如何将异常从一个进程传递到另一个进程?

    如果停止函数中的运行状态为 停止 我想在上传函数中引发异常 这似乎不起作用 我正在使用 Pipe 来传递异常 怎么了 def upload instances u1 for instance in instance try u1 recv
  • iOS/Android 检测和重定向

    js新手 慢慢来 D 需要根据用户使用的操作系统进行重定向 如果ios重定向到x 如果android重定向到y 否则 留在原来的地址 我的问题 这些片段够了吗
  • 从 Shell 输出生成文档

    有没有一种方法 工具可以直接从我的 Shell 输出甚至保存的日志生成 HTML 文档 类似于 doxygen 的作用 如果没有可用的东西 你们对如何使用现有工具做到这一点有什么创意吗 我想 在打字时 我可以放置某种标记或特殊字符 然后让一
  • C# 从一个列表中减去另一个列表或检查一个列表是否完全包含在另一个列表中

    如何从一个列表中减去另一个列表 List
  • Python 3.5+ 中类型提示的动态检查[重复]

    这个问题在这里已经有答案了 The typing https docs python org 3 library typing html模块在 Python 3 5 中实现类型提示 然而 这并不是强制执行的 它目前似乎只是为了静态类型检查器
  • 在 Google People API 中未给出的特定时间后更新联系人条目的选项

    我们使用 Google Contacts API 获取在特定时间后更新的联系人条目 以便在我们端保留联系人的更新副本 在 Google Contacts API 中 有一个选项可以使用以下命令在特定时间后更新联系人条目 更新分钟 https
  • 使用 Python 识别 Mac OS X 中的包目录

    Mac OS X Finder 使用 包 的概念使某些文件夹的内容对用户不透明 我在用着os walk 枚举目录树 并且我想跳过对应用程序包等包的枚举 The mdls命令行实用程序可用于检查是否com apple package在里面kM