Macos 复制Mac com.apple.ResourceFork扩展属性导致;“参数列表太长”;
我正在尝试使用OSX“xattr”实用程序将扩展属性从一个文件复制到另一个文件。背景是我们正在构建一个备份工具,文件/结构必须保留所有属性、ACL等。。。除了像资源分叉这样的大型属性外,其他一切都正常工作。使用下面的方法,小属性可以很好地工作。在OS X 10.7.5上尝试此操作我正在做的是: 首先,我使用“ls-l@”标识文件上的属性。结果如下:Macos 复制Mac com.apple.ResourceFork扩展属性导致;“参数列表太长”;,macos,shell,command-line,xattr,file-forks,Macos,Shell,Command Line,Xattr,File Forks,我正在尝试使用OSX“xattr”实用程序将扩展属性从一个文件复制到另一个文件。背景是我们正在构建一个备份工具,文件/结构必须保留所有属性、ACL等。。。除了像资源分叉这样的大型属性外,其他一切都正常工作。使用下面的方法,小属性可以很好地工作。在OS X 10.7.5上尝试此操作我正在做的是: 首先,我使用“ls-l@”标识文件上的属性。结果如下: -rwxrwxrwx@ 1 testuser staff 0 3 Jan 2011 File com.apple
-rwxrwxrwx@ 1 testuser staff 0 3 Jan 2011 File
com.apple.FinderInfo 32
com.apple.ResourceFork 237246
现在我导出属性(com.apple.ResourceFork是导致问题的原因):
现在,我想使用以下命令将此属性应用于另一个mac上的文件副本:
xattr -wx com.apple.ResourceFork "`cat attribfile`" File
这导致:
-bash: /usr/bin/xattr: Argument list too long
我想我知道为什么会这样。。。资源分叉数据太长,无法放入参数中。我还没有确定它开始突破的阈值,但我怀疑这与ARG_MAX有关。xargs在这里没有帮助,因为它不是几个较小的参数,而是一个非常大的参数
所以有很多问题:
我不知道如何使用
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
,我会得到这个线程中指示的错误
因此,我所做的是在控制台中执行以下命令(总结Itar
VLC并在其目标中解压它,因此…它作为一个cp
):
我希望这对其他有同样问题的人有用。这可能会涉及到一些问题,但对
xattr
进行反向工程并编写您自己的简单替换程序并接受属性文件作为其输入并非不可能。如果幸运的话,在一种方便的脚本语言Perl one liner中有一个带有绑定的系统调用?我们正在研究这个选项。看起来这个工具是MIT许可证,所以它是商业友好的。嗯,我试着用这种方式导出资源分叉,但在10.7+中失败了。从来没有试过这样设置。我来试试。看来这确实有效,解决了资源分叉的问题!谢谢您也可以不使用中间临时文件:xattr-p-xcom.apple.ResourceFork src | xxd-p-r->dst/.namedfork/rsrc
The Finder can’t complete the operation because some data in “VLC” can’t be read or written.
(Error code -36)
cd /Volumes/vlc-2.1.4/
tar cf /Applications/vlc.tar VLC.app
cd /Applications/
tar xf vlc.tar
rm vlc.tar