【问题标题】:Recursive xattr fails horribly递归 xattr 严重失败
【发布时间】:2017-04-08 16:30:05
【问题描述】:

我一直在尝试找出一种方法来递归删除某些文件的所有xattr,但是,previous methods 似乎都不再起作用了;可能还有新引入的错误?

$ xattr -rc .
option -r not recognized

$ xattr -c .
option -c not recognized

..现在是大结局!

$ find . -exec xattr -l {} \;
com.apple.FinderInfo:
Traceback (most recent call last):
  File "/usr/local/bin/xattr", line 11, in <module>
    sys.exit(main())
  File "/Library/Python/2.7/site-packages/xattr/tool.py", line 200, in main
    print(_dump(attr_value))
  File "/Library/Python/2.7/site-packages/xattr/tool.py", line 77, in _dump
    printable = s.translate(_FILTER)
TypeError: character mapping must return integer, None or unicode

哦,看,它在一堆垃圾中发现了一个xattr……知道如何、什么或谁如此严重地破坏了xattr 工具会很有趣。我只需要递归地删除扩展属性,真的!

【问题讨论】:

    标签: xcode bash macos xattr


    【解决方案1】:

    您似乎在 /usr/local/bin/xattr 中安装了非标准的 xattr 命令(macOS 附带的标准命令是 /usr/bin/xattr)。这些是 Python 错误,所以可能是 this one?无论如何,它不使用与标准语法相同的语法,因此安装它会引起混乱;我建议将其删除或重命名为不同的名称;否则可能会破坏任何尝试使用 xattr 的脚本(您的或系统的)。

    【讨论】:

    • 删除 /usr/local/bin/xattr 并保留默认 /usr/bin/xattr 解决了我的问题
    【解决方案2】:

    这也发生在我身上。我相信是由于我的$PATH

    /usr/local/bin:/usr/bin
    

    我的user local bin 在我的system usr/bin 之前。

    感谢这些帖子,我发现了问题。

    xattr 安装在两个位置。

    显示目标是内置函数、函数、别名还是外部可执行文件。(Source) /

    type -a xattr
    # xattr is /usr/local/bin/xattr
    # xattr is /usr/bin/xattr
    

    它们肯定是不同的。

    /usr/local/bin/xattr -h
    usage: xattr [-slz] file [file ...]
           xattr -p [-slz] attr_name file [file ...]
           xattr -w [-sz] attr_name attr_value file [file ...]
           xattr -d [-s] attr_name file [file ...]
    
    The first form lists the names of all xattrs on the given file(s).
    The second form (-p) prints the value of the xattr attr_name.
    The third form (-w) sets the value of the xattr attr_name to attr_value.
    The fourth form (-d) deletes the xattr attr_name.
    
    options:
      -h: print this help
      -s: act on symbolic links themselves rather than their targets
      -l: print long format (attr_name: attr_value)
      -z: compress or decompress (if compressed) attribute value in zip format
    

    VS.

    /usr/bin/xattr -h
    usage: xattr [-l] [-r] [-s] [-v] [-x] file [file ...]
           xattr -p [-l] [-r] [-s] [-v] [-x] attr_name file [file ...]
           xattr -w [-r] [-s] [-x] attr_name attr_value file [file ...]
           xattr -d [-r] [-s] attr_name file [file ...]
           xattr -c [-r] [-s] file [file ...]
    
    The first form lists the names of all xattrs on the given file(s).
    The second form (-p) prints the value of the xattr attr_name.
    The third form (-w) sets the value of the xattr attr_name to the string attr_value.
    The fourth form (-d) deletes the xattr attr_name.
    The fifth form (-c) deletes (clears) all xattrs.
    
    options:
      -h: print this help
      -l: print long format (attr_name: attr_value and hex output has offsets and
          ascii representation)
      -r: act recursively
      -s: act on the symbolic link itself rather than what the link points to
      -v: also print filename (automatic with -r and with multiple files)
      -x: attr_value is represented as a hex string for input and output
    

    因此,如果您出于某种原因确实想保留两者,那么您可以像这样显式调用它们:

    /usr/bin/xattr -lr ~
    
    /usr/local/bin/xattr -l ~
    

    【讨论】:

      猜你喜欢
      • 2011-07-08
      • 2019-03-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 2018-01-17
      相关资源
      最近更新 更多