查看、写入和删除 macOS 扩展属性,处理隔离标记与来源元数据。
扩展属性(EA)是挂在文件上的键值元数据,和权限位、时间戳相互独立。macOS 常见属性包括 com.apple.quarantine(下载隔离标记)、com.apple.metadata:kMDItemWhereFroms(来源 URL)、com.apple.FinderInfo(Finder 标志,固定 32 字节)和 com.apple.ResourceFork(资源分支)。Finder 的“显示简介”和 ls -l@ 都能看到这些属性的存在。Linux 使用 getfattr/setfattr 管理扩展属性,GNU 没有同名命令,属性命名和命名空间也不同。
基本形式:不带模式参数时列出属性名,-p 属性名 打印值,-w 属性名 值 写入字符串,-d 属性名 删除,-c 清空全部属性;-l 同时显示名称和值,-x 用十六进制显示或写入二进制值,-r 递归处理目录,-s 作用于符号链接本身。-w 默认把值当字符串,二进制数据要先转成十六进制。
删除 com.apple.quarantine 会让应用跳过首次打开的 Gatekeeper 提示,这是安全边界,只对确认可信的文件操作。清空全部属性还可能删掉 FinderInfo、来源信息和资源分支,导致应用签名校验或行为异常。ExFAT、FAT、SMB 不支持原生扩展属性,复制时可能生成 ._ 开头的 AppleDouble 文件。
# 列出下载文件的所有扩展属性名
% xattr ~/Downloads/tool.zip
# 显示名称和值,查看隔离标记与来源
% xattr -l ~/Downloads/tool.zip
# 只读取 quarantine 的值
% xattr -p com.apple.quarantine ~/Downloads/tool.zip
# 确认文件可信后,递归移除应用的 quarantine 标记
% xattr -dr com.apple.quarantine ~/Applications/Trusted.app
# 写入自定义字符串属性
% xattr -w com.example.review draft ~/Documents/report.md
# 写入二进制值:先转成十六进制,再用 -x
% xattr -wx com.example.blob "$(xxd -p icon.bin | tr -d '\n')" ~/Documents/report.md
# 删除单个自定义属性
% xattr -d com.example.review ~/Documents/report.md
xattr -w 默认写字符串,直接传二进制会截断或报错。二进制必须用 -x 加十六进制文本,可用 xxd -p 生成。com.apple.FinderInfo 固定 32 字节,长度不对会报 Result too large 或 Invalid argument;不要手工拼这个属性。xattr -c 会清空所有属性,包括 quarantine、FinderInfo 和备份来源信息,不能当作“清理一下”的通用操作。先 xattr -l 看清楚。com.apple.quarantine 等同于绕过首次打开的 Gatekeeper 检查,只对可信来源执行;不确定时用右键“打开”或系统设置里放行。._文件;这会影响跨平台目录清理和打包。ls -l@ 只显示属性名和大小,不显示值;要读内容用 xattr -p 或 xattr -l。ls — 用 -l@ 快速查看哪些文件带属性。cp — -p 保留属性,-X 丢弃属性。mdfind — 按元数据字段搜索文件。find — 用 -xattrname 批量筛选带某属性的文件。attrib — Windows 文件属性对照,机制不同。合上页面,先回答,再展开对照。
xattr -w 与 xattr -wx 写值的方式有何区别?xattr -c 文件?com.apple.quarantine 会带来什么安全影响?-w 按字符串写入,-wx 按十六进制解析二进制值。
小程序版
微信扫码,随时查命令