我有一个运行压力测试的AppleScript脚本。测试的一部分是打开,保存和关闭某些文件。文件以某种方式获取了一些“扩展属性”,这些属性禁止保存文件。这导致压力测试失败。
如何删除扩展属性?
我有一个运行压力测试的AppleScript脚本。测试的一部分是打开,保存和关闭某些文件。文件以某种方式获取了一些“扩展属性”,这些属性禁止保存文件。这导致压力测试失败。
如何删除扩展属性?
Answers:
使用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有一个手册页。
-c
对我不起作用(OS X 10.6.8)。-d
虽然没有抱怨,但也没有任何效果。我必须像这样显式地命名每个扩展属性:(xattr -rd <attrname> <folder/file>
递归删除)。要找出存在的属性(可能与整个目录树中的属性相同),请使用xattr <dir/file>
上面的答案。
xattr -c
效果很好(并成功剥离了所有元数据)。
请参阅Bavarious的答案。
xattr
与-c
标志一起使用以“清除”属性:
xattr -c yourfile.txt
要以递归方式删除目录中所有文件的扩展属性,请将-c
“ clear”标志与-r
递归标志结合使用:
xattr -rc /path/to/directory
路径是否有空格或特殊字符?
打开Terminal.app
并开始键入xattr -rc
,在其末尾添加一个空格,然后将文件或文件夹拖到Terminal.app
窗口中,它将自动添加完整路径并带有适当的转义。
-c
失败的OS X 10.5: option -c not recognized
。我们使用一个在Apple的PowerPC上进行测试。它看起来像OS X支持的下级版本-l
, -p
, -w
和 -d
。
. textClipping
如描述apple.stackexchange.com/questions/301871/...
另一种递归方法:
# 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
。
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
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
xattr -l ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
# com.apple.FinderInfo
# com.apple.metadata:kMDItemScreenCaptureGlobalRect
# com.apple.metadata:kMDItemScreenCaptureType
xattr -c ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
xattr -r ~/Desktop
xattr -rd com.apple.FinderInfo ~/Desktop
xattr -rc ~/Desktop
警告:删除这些内容后,您将不会再将它们找回来!
故障错误:没有撤消。
我想解决该错误的人正在得到。
因为错误也使我发疯...
在Mac上,如果您xattr
以python 安装,则您的环境可能有问题。
我的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 /终端默认为/ 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
错误。
xattr
您可能拥有的所有Python :pip3 uninstall xattr
Terminal
窗口并退出Terminal
Terminal
窗口。xattr
命令,它现在应该可以工作了。要么
如果您想保留Python,请
xattr
使用
/usr/bin/xattr
对于中的任何Shell
命令Terminal
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
注:我无法找到Python的帮助页面当前版本0.9.6
谢谢阅读!