是否可以在一个xattr命令中写入最大长度的元数据?


3

文本可以放到xattr多长时间有文字长度限制吗?我计划将AppleScripts源代码放到脚本文件中,以便Spotlight可以找到它。使用Finder注释不是一个选项,因为我将要编写的更改量很大。

do shell script "xattr -w com.apple.metadata:kmditemmusicalgenre " & source_code & " " & quoted form of script_path

1
有趣的工具组合。将“Apple脚本”的界限与您选择作为默认shell的shell相比较,可能会挑战AppleScript的限制。查看xattr源代码标题,对于任何名称,您似乎拥有127个字符长度的常量,对于命令本身,您似乎有64 Meg的限制,但我猜你会比写入更快(64 Meg-1字节)
bmike

Answers:


2

正如bmike所提到的,xattr.h有一个名为XATTR_MAXSIZE的常量,设置为64 MiB:

/* Maximum extended attribute size supported by VFS */
#define XATTR_MAXSIZE       (64 * 1024 * 1024)

VFS表示虚拟文件系统。

来自http://en.wikipedia.org/wiki/Extended_file_attributes#Mac_OS_X

尽管HFS +中的命名分支通过扩展区支持任意大量的数据,但扩展属性的OS支持仅支持内联属性,将其大小限制为可以容纳在单个B * -tree节点中的大小。

我不知道这是否准确或如何看到这个大小。您将首先遇到最大参数长度:

$ getconf ARG_MAX
262144
$ touch a.txt
$ xattr -w someattribute "$(dd if=/dev/random bs=140000 count=1)" a.txt
1+0 records in
1+0 records out
140000 bytes transferred in 0.011996 secs (11670527 bytes/sec)
xattr: [Errno 7] Argument list too long: 'a.txt'

我无法找到任何方式从STDIN或其他任何变通办法获取输入。

您还可以使用自定义属性名称:

$ xattr -w com.apple.metadata:MyAttribute gfdylvyieo a.txt
$ mdls -n MyAttribute a.txt
MyAttribute = "gfdylvyieo"
$ mdfind gfdylvyieo
/private/tmp/a.txt

谢谢Lauri Ranta !!! 如果我总结一下,我实际上可以创建自己的自定义属性名称,Spotlight可以看到它。并且字符的最大长度未知。我最长的脚本是24000个字符长(在source_code中计算字符数),把这么多信息放到xattr可能没问题?我不知道这意味着什么,但它可能并不严重:>我无法找到任何方式从STDIN或任何其他变通办法获取输入。但这听起来有点可怕。这是否意味着当我在AppleScript编辑器中再次保存脚本时,它会破坏这些xattrs:>自MacOS 10.6起,用户空间扩展为attrib

属性名称的最大长度为127个字符,所有更长的时间都将导致错误消息。
nohillside

@LucasFan是的,最大长度约为130000个字符。我只是意味着喜欢cat b.txt | xattr -w someattribute - a.txtxattr -w someattribute <(cat b.txt) a.txt不起作用。保存文件不应删除自定义扩展属性。
Lri 2013年

0

只是为了增加第二个更务实的答案。通常最好是获得一个可以索引要索引的文件的应用程序,而不是将重复数据填充到资源分支/元数据中。

上面的问题显示了如何使用mdls来分离您要索引的数据文件的文件分类,然后如何让导入器进入聚光灯系统来处理报告的文件类型,mdimport -L以便您在列表中获得该文件类型,以便您正在索引您希望包含的所有文件的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.