我正在尝试使用 OSX“xattr”实用程序将扩展属性从一个文件复制到另一个文件。背景是我们正在构建一个备份工具,文件/结构必须保留所有属性、ACL 等……除了资源分叉等大属性外,一切正常。使用下面的方法,小属性可以正常工作。在 OS X 10.7.5 上尝试这个是我正在做的:
首先,我使用“ls -l@”识别文件的属性。结果如下:
-rwxrwxrwx@ 1 testuser staff 0 3 Jan 2011 File
com.apple.FinderInfo 32
com.apple.ResourceFork 237246
现在我导出属性(com.apple.ResourceFork 是导致问题的原因之一):
xattr -px com.apple.ResourceFork File > attribfile
我现在想使用以下命令将此属性应用于另一台 Mac 上的文件副本:
xattr -wx com.apple.ResourceFork "`cat attribfile`" File
这导致:
-bash: /usr/bin/xattr: Argument list too long
我想我知道它为什么会发生……资源分叉数据太长了,不适合争论。我还没有确定它开始突破的阈值,但我怀疑它与 ARG_MAX 有关。xargs 在这里没有帮助,因为它不是几个较小的参数,而是一个非常大的参数。
这么多问题:
- 有没有办法让 xattr 接受这个大值?以某种方式通过标准输入将其输入?手册页没有显示它,但我不是专家,也许有一些创造性的方法可以做到这一点
- 谁能告诉我使用常用命令行工具应用大型扩展属性的正确方法?
- 如果没有库存命令行工具,对 3rd 方工具有什么建议吗?