如何设置 `kMDItemWhereFroms` 扩展属性以使其显示在 Finder 中?

如何设置 `kMDItemWhereFroms` 扩展属性以使其显示在 Finder 中?

我用 Python 从互联网上获取了一个文件,并想保存该文件的来源 URL。根据这个问题来自 2010 年,我期望使用pyxattr上班:

import xattr
import plistlib

url = "https://apple.com"
out_path = "/private/tmp/testmd.txt"

with open(out_path, "w") as f:
    f.write("hi")

wherefroms = plistlib.dumps([url], fmt=plistlib.FMT_BINARY)
xattr.set(out_path, "com.apple.metadata:kMDItemWhereFroms", wherefroms)

不幸的是,它没有:

$ mdls /tmp/testmd.txt
kMDItemFSContentChangeDate = 2022-09-20 14:29:59 +0000
kMDItemFSCreationDate      = 2022-09-20 14:12:16 +0000
kMDItemFSCreatorCode       = ""
kMDItemFSFinderFlags       = 0
kMDItemFSHasCustomIcon     = 0
kMDItemFSInvisible         = 0
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery      = 0
kMDItemFSLabel             = 0
kMDItemFSName              = "testmd.txt"
kMDItemFSNodeCount         = 2
kMDItemFSOwnerGroupID      = 0
kMDItemFSOwnerUserID       = 501
kMDItemFSSize              = 2
kMDItemFSTypeCode          = ""

Finder 的“获取信息”面板中也缺少它。但是!具有正确值的二进制 plist 已添加到 xattrs:

$ xattr -l /tmp/testmd.txt
com.apple.metadata:kMDItemWhereFroms: bplist00�_https://apple.com

我注意到几乎每个文件都包含两个 URL 的数组,一个是实际下载 URL,一个是引用者。(例如 wikimedia.org 和 wikipedia.org。)因此,我尝试添加一个包含两个字符串的数组,但行为没有改变。

我还注意到,当我修改 Finder 显示其来源 URL 的文件的 URL 时,新的 URL 会立即显示在“获取信息”面板中。

如何让 URL 显示在 Finder 中?这可能与缓存有关吗?

答案1

为了可靠地执行此操作,您需要使用未记录的函数MDItemSetAttribute,这在 Python 中是可行的,但并不简单。幸运的是,osxmetadata库已经为你完成了艰苦的工作。从 1.0.0 版本开始,这非常简单:

from osxmetadata import *
from pathlib import Path

url = "https://apple.com"
out_path = Path.home() / "test_md.txt"

with open(out_path, "w") as f:
    f.write("hi")

meta = OSXMetaData(out_path)
meta.kMDItemWhereFroms = [url]

需要注意的一点是,由于某种原因,这对于 中的文件不能可靠地起作用/tmp

相关内容