【问题标题】:Obtaining metadata "Where from" of a file on Mac在 Mac 上获取文件的元数据“从哪里来”
【发布时间】:2022-01-23 10:31:27
【问题描述】:

我正在尝试获取位于 MacOS 中文件的“获取信息”上下文菜单上的“从哪里来”扩展文件属性。

示例

当右键单击文件并显示信息时,它会显示此元数据。

下图中突出显示的部分显示了我想要获取的信息(下载文件的网站的链接)。

我想通过 Python 使用这个 Mac 特定的功能。 我想使用操作系统工具,但想不通。

【问题讨论】:

  • 这存储在文件元数据的 kMDItemWhereFroms 项中,可以使用mdls unix 命令显示。我不知道如何从 Python 中得到它,但也许这会给你更多的关键字来搜索。 :) (好吧,显然你总是可以这样做 subprocess.run("mdls ...") 但这似乎不是很优雅。)
  • @TurePålsson,感谢分享元数据 (MD) 实用程序,例如 mdls,以列出指定文件的元数据属性。如果您愿意,请将您的评论贡献给我的回答??????️

标签: python macos metadata spotlight


【解决方案1】:

macOS 将 "Where from" 属性等元数据存储在键 com.apple.metadata:kMDItemWhereFroms 下。

import xattr

value = xattr.getxattr("sublime_text_build_4121_mac.zip",'com.apple.metadata:kMDItemWhereFroms').decode("ISO-8859-1")

print(value)

'bplist00¢\x01\x02_\x10@https://download.sublimetext.com/sublime_text_build_4121_mac.zip_\x10\x1chttps://www.sublimetext.com/\x08\x0bN\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00m'

我很久以前就遇到过类似的问题。我们没有使用 Python 来解决它。

【讨论】:

  • 该二进制块可能可以使用plistlib.loads() 解码为更好的东西。
【解决方案2】:

TL;DR: 获取 扩展属性,例如 MacOS 的“从哪里来”,例如pip-install pyxattr 并使用 xattr.getxattr("file.pdf", "com.apple.metadata:kMDItemWhereFroms")

文件的扩展属性

这些extended file attributes 就像您在 MacOS(自 10.4 起)中的“从哪里来”存储文件系统未解释的元数据。它们适用于不同的操作系统。

使用命令行

您还可以使用以下工具在命令行上查询它们:

exiftool -MDItemWhereFroms -MDItemTitle -MDItemAuthors -MDItemDownloadedDate /path/to/file
xattr -p -l -x /path/to/file

MacOS 上很多attributes are displayed in property-list format,因此使用-x 选项来获得十六进制输出。

使用 Python

Ture Pålsson 指出缺少的链接关键字。此类常用且恰当的术语有助于搜索Python Package Index (PyPi)

通过关键字搜索 PyPi:扩展文件属性元数据

例如列出和获取属性使用(改编自pyxattr's official docs

import xattr

xattr.listxattr("file.pdf")
# ['user.mime_type', 'com.apple.metadata:kMDItemWhereFroms']
xattr.getxattr("file.pdf", "user.mime_type")
# 'text/plain'
xattr.getxattr("file.pdf", "com.apple.metadata:kMDItemWhereFroms")
# ['https://example.com/downloads/file.pdf']

但是,您必须转换以 plist 格式存储的 MacOS 特定元数据,例如使用plistlib

MacOS 上的文件元数据

Mac OS X 10.4 (Tiger) 引入了Spotlight 一个用于提取(或收集)、存储、索引和查询元数据的系统。它为搜索和索引提供了一个集成的系统范围的服务。

此元数据存储为具有keys prefixed with com.apple.metadata:扩展文件属性。例如,“来自”属性的键为 com.apple.metadata:kMDItemWhereFroms

使用 Python

使用 osxmetadata 来使用类似 MacOS 的 md* utils 中的功能:

from osxmetadata import OSXMetaData

filename = 'file.pdf'
meta = OSXMetaData(filename)

# get and print "Where from" list, downloaded date, title
print(meta.wherefroms, meta.downloadeddate, meta.title)

另见

【讨论】:

    猜你喜欢
    • 2018-01-04
    • 2022-10-23
    • 2018-10-04
    • 2020-09-04
    • 1970-01-01
    • 2013-10-31
    • 2018-01-26
    • 2015-11-05
    • 1970-01-01
    相关资源
    最近更新 更多