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

标签 macos shell command-line xattr file-forks

我正在尝试使用 OSX“xattr”实用程序将扩展属性从一个文件复制到另一个文件。背景是我们正在构建一个备份工具,文件/结构必须保留所有属性、ACL 等......除了资源 fork 等大属性外,一切正常。小属性使用以下方法可以正常工作。在 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

我想我知道为什么会发生这种情况……资源 fork 数据太长,无法进行论证。我还没有确定它开始突破的阈值,但我怀疑它与 ARG_MAX 有关。 xargs 在这里没有帮助,因为它不是几个较小的参数,而是一个非常大的参数。

所以多个问题:
  • 有没有办法让 xattr 接受这个大值?不知何故通过标准输入管道它?手册页没有显示它,但我不是专家,也许有一些创造性的方法来做到这一点
  • 谁能告诉我使用股票命令行工具应用大型扩展属性的正确方法吗?
  • 如果没有常用的命令行工具,对 3rd 方工具有什么建议吗?
  • 最佳答案

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

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

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

    关于macos - 复制 Mac com.apple.ResourceFork 扩展属性导致 "Argument list too long",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533796/

    相关文章:

    macos - 相对寻址错误 - Mac 10.10

    macos - 如何在MAC上安装旧版本(1.6.18) svn

    java - Android Studio 无法找到有效的 Jvm(与 MAC OS 相关)

    linux - 将子文件夹重命名为父文件夹,删除 'extra' 文件夹

    javascript - Mongo shell javascript 数组扩展

    mysql - shell 脚本 : Launch Mysql script using shell variable

    Bash 脚本在特定范围内剪切

    c# - Visual Studio 2012 命令行编译器

    windows - 学习控制台命令的重要性

    linux - 将一个命令的输出用于另一个