Jak*_*les 3 macos formatting xattr
我正在尝试编写一个脚本,使用 xattr 从 OS X 上的 Safari 下载的磁盘映像中提取原始下载 URL,以便我可以重命名它们,但仍然可以轻松获取它们的原始名称以供参考。
此命令打印给定文件下载所在 URL 的十六进制表示形式,例如:
xattr -p com.apple.metadata:kMDItemWhereFroms *.dmg
Run Code Online (Sandbox Code Playgroud)
给出
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
Run Code Online (Sandbox Code Playgroud)
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