4

我正在尝试使用 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 在这里没有帮助,因为它不是几个较小的参数,而是一个非常大的参数。

这么多问题:

  1. 有没有办法让 xattr 接受这个大值?以某种方式通过标准输入将其输入?手册页没有显示它,但我不是专家,也许有一些创造性的方法可以做到这一点
  2. 谁能告诉我使用常用​​命令行工具应用大型扩展属性的正确方法?
  3. 如果没有库存命令行工具,对 3rd 方工具有什么建议吗?
4

2 回答 2

3

我不知道如何使用xattr,但是您可以使用一个旧的文件系统技巧。注意:这基本上已经过时了,但在 10.8.2 中仍然有效;我对 10.8.3 等不做任何承诺。如果属性文件是十六进制格式,请使用:

xxd -r -p attribfile >File/..namedfork/rsrc

如果 attribfile 是原始文件,请使用cat而不是xxd -r -p. 如果属性不是资源分叉,...我不知道。

于 2012-11-23T22:24:28.663 回答
-1

接受的答案对我不起作用,所以我继续并找到了另一个解决方案,我在这里发布以防其他人需要它。

我的问题是将 vlc-2.1.4 复制到 /Applications 文件夹。它一直在说:

The Finder can’t complete the operation because some data in “VLC” can’t be read or written.
(Error code -36)

如果我尝试cp在终端中使用 a ,我会收到此线程中指示的错误。

所以我所做的是在控制台中执行以下命令(总结我tar的 VLC 并将其解压缩到它的目的地,所以......它作为一个cp):

cd /Volumes/vlc-2.1.4/
tar cf /Applications/vlc.tar  VLC.app
cd /Applications/
tar xf vlc.tar 
rm vlc.tar

我希望这对其他有同样问题的人有用。

于 2014-03-22T02:56:41.250 回答