如何在 Mac OS X 中删除文件的“扩展属性”?
Posted
技术标签:
【中文标题】如何在 Mac OS X 中删除文件的“扩展属性”?【英文标题】:How do I remove the "extended attributes" on a file in Mac OS X? 【发布时间】:2011-06-17 12:16:13 【问题描述】:我有一个运行压力测试的AppleScript 脚本。部分测试是打开、保存和关闭某些文件。不知何故,这些文件已经获得了一些禁止保存文件的“扩展属性”。这会导致压力测试失败。
如何删除扩展属性?
【问题讨论】:
扩展属性不能阻止文件被保存。你确定这不是权限问题,还是 ACL? 您刚刚升级到 10.7.3 吗?似乎有一个错误,许多 GUI 应用程序(包括 TextEdit,但也包括其他应用程序 - 包括我自己编写的一个不会做任何奇怪事情的应用程序)现在将在文件上设置隔离位。正如@Bavarious 所说,您可以使用@xattr@ 将其删除。查看免费的 TextWrangler,我认为它具有良好的 AppleScript 支持。有人告诉我它没有设置隔离位。 如果以下方法有效,您应该接受答案 - 它有助于使本网站成为一个良好的知识库:-) 【参考方案1】:答案(个别文件)
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。选择要删除的键。
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。再次展示键以查看它们已被移除。
xattr -l ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
# com.apple.FinderInfo
# com.apple.metadata:kMDItemScreenCaptureGlobalRect
# com.apple.metadata:kMDItemScreenCaptureType
4。最后,删除特定文件的所有键
xattr -c ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
答案(目录中的所有文件)
1。在选择中使用的展示键。
xattr -r ~/Desktop
2。删除目录中每个文件的特定键
xattr -rd com.apple.FinderInfo ~/Desktop
3。删除目录中每个文件上的所有键
xattr -rc ~/Desktop
警告:一旦删除,您将无法恢复它们!错误:无法撤消。
错误
我想解决人们遇到的错误。
因为这些错误也让我发疯了......
在mac上如果你在python中安装xattr
,那么你的环境可能有问题。
我的 Mac 上有两个不同的路径用于
xattr
type -a xattr
# xattr is /usr/local/bin/xattr # PYTHON Installed Version
# xattr is /usr/bin/xattr # Mac OSX Installed Version
因此,-c
在 xargs 中不起作用的示例之一是因为在 bash 中您默认使用非 python 版本。
适用于-c
/usr/bin/xattr -c
不适用于-c
/usr/local/bin/xattr -c
# option -c not recognized
我的 Shell/Terminal 默认为 /usr/local/bin/xattr,因为我的 $PATH
/usr/local/bin:
在 /usr/bin:
之前,我认为这是默认设置。
我可以证明这一点,因为如果你尝试卸载 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)?
解决方法
修复option -c not recognized
错误。
-
卸载您可能拥有的任何 Python
xattr
:pip3 uninstall xattr
关闭所有Terminal
窗口并退出Terminal
重新打开一个新的Terminal
窗口。
重新运行xattr
命令,它现在应该可以工作了。
或
如果你想保留 Python
xattr
然后使用
/usr/bin/xattr
对于Terminal
中的任何Shell
命令
示例:
xattr
的 Python 版本根本不处理图像:
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 PAGE for OSX xattr
MAN PAGE for Python xattr VERSION 0.6.4
注意:我无法找到当前版本 0.9.6 的 python 帮助页面
感谢阅读!
【讨论】:
【参考方案2】:使用xattr
命令。您可以检查扩展属性:
$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine
并使用-d
选项删除一个扩展属性:
$ xattr -d com.apple.quarantine s.7z
$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms
您还可以使用-c
选项删除所有扩展属性:
$ xattr -c s.7z
$ xattr s.7z
xattr -h
将显示命令行选项,xattr has a man page。
【讨论】:
Apple 有一个在线手册页:developer.apple.com/documentation/Darwin/Reference/ManPages/… 看来 -c 选项已在 Mountain Lion (10.8) 中删除。 xattr -h 不再列出 -c 并在使用时产生“-c 无法识别”。现在要一个一个删除扩展属性非常痛苦。-c
不适用于我(OS X 10.6.8)。 -d
虽然没有抱怨,但也没有任何效果。我必须像这样显式地命名每个扩展属性:xattr -rd <attrname> <folder/file>
(递归删除)。要找出存在的属性(可能整个目录树中的属性相同),请使用xattr <dir/file>
,如上面的答案。
@mindtheif 这里没有人提到这需要 xCode 命令行工具。在 10.6.8 上,它被称为不同的东西。 Here's a link 到 GitHub 上的预构建安装程序,因此您不必安装所有 xCode 即可查看这是否是您的问题。
在我的 10.8.5 系统上安装 Xcode 后,xattr -c
对我来说很好(并成功剥离了所有元数据)。【参考方案3】:
另一种递归方法:
# 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
【讨论】:
-c
在 OS X 10.5 上失败:option -c not recognized
。我们使用其中一个在 Apple 的 PowerPC 上进行测试。 OS X 的低级版本好像支持 -l
、-p
、-w
和 -d
。
@jww 我在下面的答案中解释了为什么您会收到错误消息。 ***.com/a/58616002/1896134【参考方案4】:
删除单个文件的单个属性
查看 Bavarious 的回答。
删除单个文件上的所有扩展属性
使用xattr
和-c
标志来“清除”属性:
xattr -c yourfile.txt
删除许多文件上的所有扩展属性
要递归删除目录中所有文件的扩展属性,请将-c
“清除”标志与-r
递归标志结合起来:
xattr -rc /path/to/directory
Mac OS X 用户提示
路径很长,有空格或特殊字符?
打开Terminal.app
并开始输入xattr -rc
,包含一个尾随空格,然后将文件或文件夹拖到Terminal.app
窗口,它会自动添加完整路径并适当转义。
【讨论】:
-c
在 OS X 10.5 上失败:option -c not recognized
。我们使用其中一个在 Apple 的 PowerPC 上进行测试。 OS X 的低版本好像支持 -l
、-p
、-w
和 -d
。
@cwd:Finder 拖放到终端不适用于某些“特殊”Finder 文件,例如. textClipping
,如apple.stackexchange.com/questions/301871/… 中所述
@jww 我在下面的答案中解释了为什么您会收到错误消息。 ***.com/a/58616002/1896134【参考方案5】:
尝试使用:
xattr -rd com.apple.quarantine directoryname
这会递归地移除所有地方的讨厌属性。
【讨论】:
以上是关于如何在 Mac OS X 中删除文件的“扩展属性”?的主要内容,如果未能解决你的问题,请参考以下文章
删除 Mac OS X 中 shell 可执行文件的停靠图标?
如何从 Mac OS X 中完全删除 Eclipse(包括设置和插件)?