【发布时间】:2012-11-12 02:19:27
【问题描述】:
我正在尝试使用 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 方工具有什么建议吗?
【问题讨论】:
-
这可能有点牵扯,但对
xattr进行逆向工程并编写您自己的简单替换可能并非不可能,该替换接受属性文件作为其输入。如果幸运的话,还有一个带有绑定的单一系统调用,使用一种方便的脚本语言 - Perl 单线? -
我们正在考虑这个选项。看起来这个工具是 MIT 许可证,所以它的商业友好。
标签: macos shell command-line xattr file-forks