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

     2023-02-16     264

关键词:

【中文标题】如何在 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 xattrpip3 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 &lt;attrname&gt; &lt;folder/file&gt;(递归删除)。要找出存在的属性(可能整个目录树中的属性相同),请使用xattr &lt;dir/file&gt;,如上面的答案。 @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

这会递归地移除所有地方的讨厌属性。

【讨论】:

在 OS X 上将扩展属性写入文件

】在OSX上将扩展属性写入文件【英文标题】:WritingextendedattributestofilesonOSX【发布时间】:2016-02-0123:17:33【问题描述】:我试图在命令行中使用setfattr命令,但它告诉我commandnotfound。我假设这意味着该软件包未安装,但是据我了解... 查看详情

在 Mac OS X 中卸载软件包

...ackagesinMacOSX【发布时间】:2014-11-1313:35:43【问题描述】:如何在MacOSX中完全卸载(删除属于某个包的文件)?这可以使用终端中的命令来完成吗?我在我的Mac上安装了一个.pkg包,我想知道如何在不使用UninstallPKG等第三方应用程... 查看详情

如何从 Mac OS X 中完全删除 Eclipse(包括设置和插件)?

】如何从MacOSX中完全删除Eclipse(包括设置和插件)?【英文标题】:HowtodeleteEclipsecompletely(includingsettingsandplugins)fromMacOSX?【发布时间】:2011-03-1206:28:14【问题描述】:我的带有GAE的Eclipse损坏并且工作异常。所以我从Application文件... 查看详情

如何在 Mac OS X 上监视目录中的更改?

】如何在MacOSX上监视目录中的更改?【英文标题】:HowtoMonitorChangesinaDirectoryonMacOSX?【发布时间】:2012-01-0722:41:03【问题描述】:在WindowsAPI中,当您监视目录时,回调会提供更改的内容。我如何在MacOSX上完成相同的操作?我查看... 查看详情

如何在 Mac OS X 上创建虚拟文件?

】如何在MacOSX上创建虚拟文件?【英文标题】:HowtocreateavirtualfileonmacOSX?【发布时间】:2015-06-1902:07:34【问题描述】:我需要在mac上创建一个文件,该文件保留在服务器上,但显示在我的mac上的同步文件夹中。该文件需要显示实... 查看详情

如何在 Mac OS X 10.5 中处理从 Finder 中的多个文件拖放?

】如何在MacOSX10.5中处理从Finder中的多个文件拖放?【英文标题】:HowdoIhandlemultiplefiledrag/dropfromFinderinMacOSX10.5?【发布时间】:2011-01-0104:10:14【问题描述】:我需要从Finder中获取所有拖放到我的应用程序中的文件的URL。我有一个在... 查看详情

如何在 Mac OS X 中跟踪程序的系统调用?

】如何在MacOSX中跟踪程序的系统调用?【英文标题】:HowtotracesystemcallsofaprograminMacOSX?【发布时间】:2015-09-1118:40:40【问题描述】:我想跟踪find命令todebugsomeperformanceissues进行的系统调用,但是我不知道如何在MacOSXYosemite上执行此... 查看详情

Mac OSX文件权限有'@' - 如何删除'@' [关闭]

】MacOSX文件权限有\\\'@\\\'-如何删除\\\'@\\\'[关闭]【英文标题】:MacOSXfilepermissionshas\'@\'-howtoremovethat\'@\'[closed]MacOSX文件权限有\'@\'-如何删除\'@\'[关闭]【发布时间】:2017-05-0812:41:29【问题描述】:如何从文件权限中删除“@”字符?... 查看详情

Mac OS X:删除标签中的文本(NSTextField)

】MacOSX:删除标签中的文本(NSTextField)【英文标题】:MacOSX:strikethroughthetextinalabel(NSTextField)【发布时间】:2011-11-0918:19:48【问题描述】:是否可以删除标签中的文本(NSTextField)?我曾尝试使用字体面板,但显然在我尝试设置它们... 查看详情

如何卸载从 pkg (Mac OS X) 安装的 nodejs?

】如何卸载从pkg(MacOSX)安装的nodejs?【英文标题】:HowdoIuninstallnodejsinstalledfrompkg(MacOSX)?【发布时间】:2012-02-2102:53:47【问题描述】:我从我的Mac上的pkg文件安装了NodeJS。现在我需要卸载它。请告诉我该怎么做。我试图从这个列表... 查看详情

如何卸载从 pkg (Mac OS X) 安装的 nodejs?

】如何卸载从pkg(MacOSX)安装的nodejs?【英文标题】:HowdoIuninstallnodejsinstalledfrompkg(MacOSX)?【发布时间】:2012-02-2102:53:47【问题描述】:我从我的Mac上的pkg文件安装了NodeJS。现在我需要卸载它。请告诉我该怎么做。我试图从这个列表... 查看详情

java示例代码_:如何在Mac OS X中创建新文件夹

java示例代码_:如何在Mac OS X中创建新文件夹 查看详情

如何在 Mac OS X 上安装 Apache Ant?

】如何在MacOSX上安装ApacheAnt?【英文标题】:HowcanIinstallApacheAntonMacOSX?【发布时间】:2011-03-1411:05:08【问题描述】:我尝试在我的Mac上安装ApacheAnt,并按照以下步骤操作:我将apache-ant-1.8.1-bin.tar.gz下载到我的下载文件夹中。我使... 查看详情

如何在 Mac OS X 上的 C 程序中包含 hdf5 头文件?

】如何在MacOSX上的C程序中包含hdf5头文件?【英文标题】:Howtoincludehdf5headerfilesinaCprogramonMacOSX?【发布时间】:2012-06-0117:37:42【问题描述】:我正在尝试学习如何使用C进行编程,并且我希望能够将数据从.hdf文件导入到我的C程序... 查看详情

如何在 Mac OS X 中升级 PHP?

】如何在MacOSX中升级PHP?【英文标题】:HowdoIupgradePHPinMacOSX?【发布时间】:2011-02-0108:04:01【问题描述】:我觉得这是一个非常迟钝的问题,但奇怪的是,这个问题没有得到很好的记录。我想升级PHP,但是有几个问题:没有内置... 查看详情

如何在 Mac OS X 中获取光标相对于窗口的位置?

】如何在MacOSX中获取光标相对于窗口的位置?【英文标题】:HowtogetcursorpositionrelativetowindowinMacOSX?【发布时间】:2011-11-1919:23:14【问题描述】:我可以使用[NSEventmouseLocation]来获取光标的位置,但这会给我屏幕坐标。当光标在视图... 查看详情

如何在 Mac OS X 的终端中清除以前的输出?

】如何在MacOSX的终端中清除以前的输出?【英文标题】:HowcanIclearpreviousoutputinTerminalinMacOSX?【发布时间】:2011-01-1223:48:51【问题描述】:我知道“清除”当前屏幕的clear命令,但它只是通过打印大量换行符来做到这一点-清除的内... 查看详情

如何在 mac os X 上配置 tomcat?

】如何在macosX上配置tomcat?【英文标题】:HowcanIprofiletomcatonmacosX?【发布时间】:2009-10-1115:21:28【问题描述】:我正在运行一个独立的(我的意思是不在任何IDE中)tomcat实例。我想分析我的应用程序,因为它在特定用例中响应非... 查看详情