macos - 打印 xattr 十六进制输出的字符串表示

标签 macos formatting xattr

我正在尝试编写一个脚本,使用 xattr 从使用 Safari 在 OS X 上下载的磁盘镜像中提取原始下载 URL,以便我可以重命名它们,但仍然可以轻松获取它们的原始名称以供引用。

此命令打印给定文件下载来源的 URL 的十六进制表示,例如:

xattr -p com.apple.metadata:kMDItemWhereFroms *.dmg

给予

62 70 6C 69 73 74 30 30 A1 01 5F 10 4F 68 74 74
70 3A 2F 2F 61 64 63 64 6F 77 6E 6C 6F 61 64 2E
61 70 70 6C 65 2E 63 6F 6D 2F 4D 61 63 5F 4F 53
5F 58 2F 6D 61 63 5F 6F 73 5F 78 5F 31 30 2E 36
2E 31 5F 62 75 69 6C 64 5F 31 30 62 35 30 34 2F
30 34 31 35 30 37 33 61 2E 64 6D 67 08 0A 00 00
00 00 00 00 01 01 00 00 00 00 00 00 00 02 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 5C

URL 从第 14 个字节开始(如果我计算正确的话)并且以 NULL 结尾。我如何格式化这个字符串,以便得到如下字符串输出:

http://adcdownload.apple.com/Mac_OS_X/mac_os_x_10.6.1_build_10b504/0415073a.dmg

(别担心,除非您登录到 ADC,否则此链接不起作用)

...本质上,与 Finder 将在“获取信息”中显示的内容相同。我尝试将 xattr 的输出通过管道传输到 xxd,但我不确定如何指定偏移量以便字符串从正确的位置开始。

最佳答案

所以,在查看 xattr -p 返回的二进制数据后,我意识到它实际上是一个二进制 plist...因此数据前面有“bplist”。出于某种原因,我之前没有注意到这一点,但鉴于此,这里有一个适用于从 10.5 到 10.8 的每个 OS X 的正确解决方案。

为避免重复,我将链接到源而不是粘贴它:https://github.com/jakepetroules/wherefrom

关于macos - 打印 xattr 十六进制输出的字符串表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11698034/

相关文章:

linux - 类Unix系统中如何获取网关MAC地址

c# - 如果 float 为零且采用特定货币格式,如何将小数转换为不带部分的字符串?

java - 解析Excel文件中存储的日期字符串

linux - 不支持 Xattrs

macos - 在 OSX 上更改文件的 "date added"属性

macos - Mavericks下的CALayer添加CIFilter?

cocoa - NSScrollView 是如何工作的?

C:故障?:排序功能不适用于 LINUX (RHEL 6.6),但适用于 MAC OS X (10.3)

python - 在 Python 中使用换行符和制表符格式化字符串输出?

linux - 设置安全属性时 xattr 命令错误