复制 Mac com.apple.ResourceFork 扩展属性导致"Argument list too long"



我正在尝试使用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. 如果没有库存命令行工具,对第三方工具有什么建议吗

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

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

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

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

我的问题是将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,我会得到这个线程中指示的错误。

因此,我所做的是在控制台中执行以下命令(总结VLC的tar并在其目的地中取消标记,因此……它可以作为cp工作):

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

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

相关内容

最新更新