Mac OS X 如何保存有关下载文件的 URL 的详细信息?

Mac OS X 如何保存有关下载文件的 URL 的详细信息?

WRT这个话题我应该如何处理 com.apple.quarantine?,我想知道 OS X 如何学习并保存 @ 字段中的这些信息。我不是在寻找禁用此功能的方法,而是在寻找有关此功能实现的代码(或伪代码、想法等)。提前谢谢您。

答案1

正如丹尼尔提到的,浏览器可以将下载文件的源 URL(以及引荐来源)存储在扩展属性中com.apple.metadata:kMDItemWhereFroms

Apple 首先将其添加到 Mac OS X 10.4 版 Safari 中,然后将其添加到 Chrome/Chromium[问题 22289]并且有一个未完成的增强请求将其添加到 Firefox[错误 337051]

至于实现这一点的实际代码,请查看铬补丁

答案2

下载任何文件后,运行xattr file将显示浏览器在扩展属性中存储的内容:

xattr mydownload.gz
com.apple.metadata:kMDItemWhereFroms
苹果隔离区

接下来,更多细节:

xattr -p com.apple.quarantine mydownload.gz
0000;4cee9d4b;Safari;24064D6B-9854-46BC-AF73-5DE5F8042D0B|com.apple.Safari

xattr -p com.apple.metadata:kMDItemWhereFroms mydownload.gz
62 70 6C 69 73 74 30 30 A1 01 5F 10 24 68 74 74
70 3A 2F 2F 73 75 [等等]

...或者,以可读格式:

mdls -名称 kMDItemWhereFroms mydownload.gz
kMDItemWhereFroms = (
    “http://某个网址”

您可以设置这些(或任何您想要的属性)你自己也可以:

xattr -w 某个名称某个值 mydownload.gz

下列的也可以工作,尽管再次运行上述命令时结果会有所不同:

xattr -w com.apple.metadata:kMDItemWhereFroms http://example.com mydownload.gz

对于com.apple.quarantine属性,根据理解

通常,隔离数据由一组 4 个分号分隔的值组成(一组用途不明的十进制数字 - 通常为 0000、8 个字符不透明身份证、创建隔离文件的应用程序的名称,以及该应用程序的 UTI(以管道符号为前缀)

例如,对于使用 Mozilla FireFox 下载的两个不同文件,其格式如下:

com.apple.quarantine: 0000;4b392bb2;Firefox;|org.mozilla.firefox
com.apple.quarantine: 0000;4b38d820;Firefox;|org.mozilla.firefox

如果您需要的话,您可以使用 Automator 的文件夹操作对特定文件夹中的新文件运行此类命令。

答案3

这些信息存储在所谓的“扩展属性”中。John Siracusa 有一篇精彩的文章,讨论了首次在 OS X 10.4 中引入扩展属性的情况:http://arstechnica.com/apple/reviews/2005/04/macosx-10-4.ars/7

似乎不再有“xattr”命令行工具的手册页,但“xattr -h”应该显示基本帮助。

/usr/include/sys/xattr.h 中提供了 POSIX/BSD 级 API,它定义了 C 函数,例如 getxattr()、setxattr()、removexattr()、listxattr() 及其基于 FILE 的同类函数。(这些命令与“xattr(1)”不同,有手册页)。

答案4

它是由下载文件的应用程序设置的。没有神奇的下载检测,只是下载应用程序在下载的文件上设置的属性。

我刚刚使用wget、Google Chrome、Firefox 和 Safari 下载了一个 zip 文件,正如预期的那样,wget下载没有扩展属性,而浏览器下载有,因为它们知道该功能。有趣的是,Firefox 下载设置了隔离,但忘记设置com.apple.metadata:kMDItemWhereFroms下载文件最初所在的信息(其 URL)。Safari 和 Chrome 都设置了,wget都没有设置。

相关内容