我有一个运行压力测试的AppleScript脚本。测试的一部分是打开、保存和关闭某些文件。不知何故,文件获得了一些禁止保存文件的“扩展属性”。这会导致压力测试失败。
如何删除扩展属性?
我有一个运行压力测试的AppleScript脚本。测试的一部分是打开、保存和关闭某些文件。不知何故,文件获得了一些禁止保存文件的“扩展属性”。这会导致压力测试失败。
如何删除扩展属性?
使用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有一个手册页。
删除单个文件中的单个属性
请看巴伐利亚的回答。
删除单个文件上的所有扩展属性
使用xattr和-c标志来“清除”属性:
xattr -c yourfile.txt
删除许多文件上的所有扩展属性
要递归地删除目录中所有文件的扩展属性,将-c "clear"标记和-r recursive标记结合使用:
xattr -rc /path/to/directory
给Mac OS X用户的建议
有一个有空格或特殊字符的长路径?
打开终端。然后开始输入xattr -rc,包括一个尾随空格,然后将文件或文件夹拖到终端。应用程序窗口,它会自动添加正确的转义完整的路径。
另一种递归方法:
# 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
答案(个别档案)
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
Answer(一个目录中的所有文件)
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)?
解决方法
修复选项-c无法识别的错误。
卸载你所有的Python xattr 关闭所有终端窗口并退出终端 重新打开一个新的终端窗口。 重新运行xattr命令,现在应该可以工作了。
OR
如果你想保留Python xattr,那么使用
/usr/bin/xattr
用于终端中的任何Shell命令
例子:
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
手册页
OSX xattr手册页
Python xattr版本0.6.4手册页
注意:我找不到当前版本0.9.6的python帮助页面
感谢阅读!