打印xattr十六进制输出的字符串表示形式

时间:2012-07-28 03:35:15

标签: macos formatting xattr

我正在尝试编写一个脚本,使用xattr从OS X下载的Safari图像中提取原始下载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将在Get Info中显示相同的内容。我尝试将xattr的输出管道输出到xxd,但我不确定如何指定偏移量,以便字符串从正确的位置开始。

1 个答案:

答案 0 :(得分:3)

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

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

相关问题