0

我有一个脚本,它收集一堆文件系统对象信息(哈希、日期等)并将其存储在 MySQL 数据库中(每个对象一行)。该脚本在 Mac OS X 10.10.4 (MBP) 的 Bash 中运行。

我也想将 HFS+ 扩展属性存储在数据库中。xattr 给出如下所示的输出,我想转储十六进制和格式化文本,只留下属性名称和 ASCII 值。这意味着不只是转储行号、十六进制和 | 格式化字符,但也将值连接到每个属性名称的一行上,并在前面加上属性名称。请注意,每个对象(文件/文件夹)可能有多个属性,并且属性名称未定义。

接受这个输入:

$xattr -l wordpress-3.9.6.zip 
com.apple.metadata:kMDItemWhereFroms:
00000000  62 70 6C 69 73 74 30 30 A2 01 02 5F 10 29 68 74  |bplist00..._.)ht|
00000010  74 70 73 3A 2F 2F 77 6F 72 64 70 72 65 73 73 2E  |tps://wordpress.|
00000020  6F 72 67 2F 77 6F 72 64 70 72 65 73 73 2D 33 2E  |org/wordpress-3.|
00000030  39 2E 36 2E 7A 69 70 5F 10 2F 68 74 74 70 73 3A  |9.6.zip_./https:|
00000040  2F 2F 77 6F 72 64 70 72 65 73 73 2E 6F 72 67 2F  |//wordpress.org/|
00000050  64 6F 77 6E 6C 6F 61 64 2F 72 65 6C 65 61 73 65  |download/release|
00000060  2D 61 72 63 68 69 76 65 2F 08 0B 37 00 00 00 00  |-archive/..7....|
00000070  00 00 01 01 00 00 00 00 00 00 00 03 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00 00 00 00 69              |...........i|
0000008c
com.apple.quarantine: 0001;55701556;Google Chrome.app;8AD80928-CB48-48EA-8A1B-EC4B0BE656A9

让它看起来像这样:

com.apple.metadata:kMDItemWhereFroms: bplist00..._.)https://wordpress.org/wordpress-3.9.6.zip_./https://wordpress.org/download/release-archive/..7...............................i
com.apple.quarantine: 0001;55701556;Google Chrome.app;8AD80928-CB48-48EA-8A1B-EC4B0BE656A9

谢谢你的帮助

MC

4

1 回答 1

0

xattr不是很可定制;它更多地用于人类浏览而不是脚本使用。你最好使用另一种语言。这是 Python 中的一个示例:

import xattr
x = xattr.xattr('wordpress-3.9.6.zip')
for name, value in x:
     print name, repr(x[name])

根据所需的输出,您可能希望放弃对 的调用repr(或使用不同的包装器)。x[name]

请注意,您几乎肯定不希望程序.的 ASCII 输出xattr,因为它们代表任何不可打印的 ASCII 字符。

于 2015-08-11T16:33:12.470 回答