macos 如何在 Mac OS X 中删除文件的“扩展属性”?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4833052/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-21 07:40:17  来源:igfitidea点击:

How do I remove the "extended attributes" on a file in Mac OS X?

macosattributes

提问by tames

I have an AppleScriptscript that runs a stress test. Part of the test is to open, save, and close certain files. Somehow, the files have picked up some "extended attributes" that prohibit the files from being saved. That causes the stress test to fail.

我有一个运行压力测试的AppleScript脚本。部分测试是打开、保存和关闭某些文件。不知何故,这些文件已经获得了一些禁止保存文件的“扩展属性”。这会导致压力测试失败。

How do I remove the extended attributes?

如何删除扩展属性?

回答by

Use the xattrcommand. You can inspect the extended attributes:

使用xattr命令。您可以检查扩展属性:

$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine

and use the -doption to delete one extended attribute:

并使用-d选项删除一个扩展属性:

$ xattr -d com.apple.quarantine s.7z
$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms

you can also use the -coption to remove all extended attributes:

您还可以使用该-c选项删除所有扩展属性:

$ xattr -c s.7z
$ xattr s.7z

xattr -hwill show you the command line options, and xattr has a man page.

xattr -h将向您显示命令行选项,并且xattr 有一个手册页

回答by cwd

Removing a Single Attribute on a Single File

删除单个文件的单个属性

See Bavarious's answer.

见巴伐利亚的回答。



To Remove All Extended Attributes On a Single File

删除单个文件上的所有扩展属性

Use xattrwith the -cflag to "clear" the attributes:

xattr-c标志一起使用以“清除”属性:

xattr -c yourfile.txt





To Remove All Extended Attributes On Many Files

删除许多文件的所有扩展属性

To recursively remove extended attributes on all files in a directory, combine the -c"clear" flag with the -rrecursive flag:

要递归删除目录中所有文件的扩展属性,请将-c“清除”标志与-r递归标志结合使用:

xattr -rc /path/to/directory





A Tip for Mac OS X Users

给 Mac OS X 用户的提示

Have a long path with spaces or special characters?

有一个带有空格或特殊字符的长路径?

Open Terminal.appand start typing xattr -rc, include a trailing space, and then then drag the file or folder to the Terminal.appwindow and it will automatically add the full path with proper escaping.

打开Terminal.app并开始输入xattr -rc,包括一个尾随空格,然后将文件或文件夹拖到Terminal.app窗口中,它会自动添加带有正确转义的完整路径。

回答by venkat

Try using:

尝试使用:

xattr -rd com.apple.quarantine directoryname

This takes care of recursively removing the pesky attribute everywhere.

这负责递归地删除所有地方的讨厌的属性。

回答by bob

Another recursive approach:

另一种递归方法:

# change directory to target folder:
cd /Volumes/path/to/folder

# find all things of type "f" (file), 
# then pipe "|" each result as an argument (xargs -0) 
# to the "xattr -c" command:
find . -type f -print0 | xargs -0 xattr -c

# Sometimes you may have to use a star * instead of the dot.
# The dot just means "here" (whereever your cd'd to
find * -type f -print0 | xargs -0 xattr -c

回答by JayRizzo



Answer (Individual Files)

答案(个别文件)



1. Showcase keys to use in selection.

1. 展示选择中使用的键。

xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.lastuseddate#PS
    # com.apple.metadata:kMDItemIsScreenCapture
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

2. Pick a Key to delete.

2. 选择要删除的键。

xattr -d com.apple.lastuseddate#PS ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
xattr -d kMDItemIsScreenCapture ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png

3. Showcase keys again to see they have been removed.

3. 再次展示钥匙以查看它们已被移除。

xattr -l ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

4. Lastly, REMOVE ALL keys for a particular file

4. 最后,删除特定文件的所有键

xattr -c ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png


Answer (All Files In A Directory)

答案(目录中的所有文件)



1. Showcase keys to use in selection.

1. 展示选择中使用的键。

xattr -r ~/Desktop

2. Remove a Specific Key for EVERY FILE in a directory

2.删除目录中每个文件的特定键

xattr -rd com.apple.FinderInfo ~/Desktop

3. Remove ALL keys on EVERY FILE in a directory

3.删除目录中每个文件的所有键

xattr -rc ~/Desktop

WARN: Once you delete these you DON'T get them back!
FAULT ERROR: There is NO UNDO.

警告:一旦你删除了这些你就不会再找回来了!
故障错误:没有撤消。



Errors

错误



I wanted to address the error's people are getting. Because the errors drove me nuts too...On a mac if you install xattrin python, then your environment may have an issue.

我想解决人们遇到的错误。 因为这些错误也让我发疯了......在 Mac 上,如果你安装xattr在 python 中,那么你的环境可能有问题。

There are two different paths on my mac for xattr

我的 mac 上有两条不同的路径 xattr

type -a xattr

    # xattr is /usr/local/bin/xattr    # PYTHON Installed Version
    # xattr is /usr/bin/xattr          # Mac OSX Installed Version

So in one of the example's where -cwill not work in xargs is because in bash you default to the non-python version.

因此,在示例之一-c中 xargs 不起作用的地方是因为在 bash 中您默认使用非 Python 版本。

Works with -c

-c

/usr/bin/xattr -c

Does NOT Work with -c

不适用于 -c

/usr/local/bin/xattr -c
    # option -c not recognized

My Shell/Terminal defaults to /usr/local/bin/xattr because my $PATH/usr/local/bin:is before /usr/bin:which I believe is the default.

我的shell /终端默认为/ usr / local / bin目录/ XATTR,因为我$PATH/usr/local/bin:是之前/usr/bin:我认为是默认它。

I can prove this because, if you try to uninstall the python xattryou will see:

我可以证明这一点,因为如果您尝试卸载 python,xattr您将看到:

pip3 uninstall xattr
Uninstalling xattr-0.9.6:
  Would remove:
    /usr/local/bin/xattr
    /usr/local/lib/python3.7/site-packages/xattr-0.9.6.dist-info/*
    /usr/local/lib/python3.7/site-packages/xattr/*
Proceed (y/n)?


Workarounds

解决方法



To Fix option -c not recognizedErrors.

修复option -c not recognized错误。

  1. Uninstall any Python xattryou may have: pip3 uninstall xattr
  2. Close all Terminalwindows & quit Terminal
  3. Reopen a new Terminalwindow.
  4. ReRun xattrcommand and it should now work.
  1. 卸载xattr您可能拥有的任何 Python :pip3 uninstall xattr
  2. 关闭所有Terminal窗口并退出Terminal
  3. 重新打开一个新Terminal窗口。
  4. 重新运行xattr命令,它现在应该可以工作了。

OR

或者

If you want to keep the Python xattrthen use

如果你想保留 Pythonxattr然后使用

/usr/bin/xattr

for any Shellcommands in Terminal

对于任何Shell命令Terminal



Example:

例子:



Python's version of xattrdoesn't handle images at all:

Python 的版本xattr根本不处理图像:

Good-Mac:~ JayRizzo$ xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # Traceback (most recent call last):
    #   File "/usr/local/bin/xattr", line 8, in <module>
    #     sys.exit(main())
    #   File "/usr/local/lib/python3.7/site-packages/xattr/tool.py", line 196, in main
    #     attr_value = attr_value.decode('utf-8')
    # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 2: invalid start byte

Good-Mac:~ JayRizzo$ /usr/bin/xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.lastuseddate#PS
    # com.apple.metadata:kMDItemIsScreenCapture
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

Man Pages

手册页

MAN PAGE for OSX xattr

OSX xattr 的手册页

MAN PAGE for Python xattr VERSION 0.6.4

Python xattr 版本 0.6.4 的手册页

NOTE: I could notfind the python help page for current VERSION 0.9.6

注:我无法找到Python的帮助页面当前版本0.9.6

Thanks for Reading!

谢谢阅读!