【问题标题】:Copy Mac com.apple.ResourceFork extended attribute causing "Argument list too long"复制 Mac com.apple.ResourceFork 扩展属性导致“参数列表太长”
【发布时间】: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 在这里没有帮助,因为它不是几个较小的参数,而是一个非常大的参数。

这么多问题:

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

【问题讨论】:

  • 这可能有点牵扯,但对xattr 进行逆向工程并编写您自己的简单替换可能并非不可能,该替换接受属性文件作为其输入。如果幸运的话,还有一个带有绑定的单一系统调用,使用一种方便的脚本语言 - Perl 单线?
  • 我们正在考虑这个选项。看起来这个工具是 MIT 许可证,所以它的商业友好。

标签: macos shell command-line xattr file-forks


【解决方案1】:

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

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

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

【讨论】:

  • 嗯,我尝试以这种方式导出资源分支,但在 10.7+ 中失败了。从未尝试过以这种方式设置它。我试试看。
  • 看来这确实有效,它解决了资源分叉的问题!谢谢!
  • 你也可以不用中间临时文件:xattr -p -x com.apple.ResourceFork src | xxd -p -r - > dst/..namedfork/rsrc
【解决方案2】:

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

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

所以我所做的是在控制台中执行以下命令(总结我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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 2019-06-03
    • 2017-11-30
    • 2020-05-09
    • 2014-05-21
    • 2015-04-04
    • 2021-10-26
    • 2014-04-18
    相关资源
    最近更新 更多