首页 > ios > mac下文件带有扩展属性@的问题

mac下文件带有扩展属性@的问题

  在mac os下HFS+的文件系统上 文件经常会被附加上mac专有的扩展属性 具体的表现是用ls -l 查看时 会有@标志 比如

$ ls -l
total 0
-rw-r–r–@ 1 Daniel  staff  0 16 Jul 19:28 1.txt
-rw-r–r–  1 Daniel  staff  0 16 Jul 19:28 2.txt

  这个属性是用户在Finder里对文件进行任意操作时 就会附加上的 – – 比如右键看Info 然后在Spotlight Commends里写上几个字再删掉 @属性是不会删掉的,问题来了 – 如果把文件从mac系统用tar打包 拷贝到linux系统释放文件 @属性会造成莫名的错误。
  我就在我们公司的linux服务器上发布网站的时候碰到过这个事情 页面里莫名出现一段com.apple.metadata *** 这样的字段,google了一阵 原因在于tar命令本身默认并不区分extend attributes 但是mac下的cp命令做的更好 选项 -X 即可忽略这些属性

man cp:   -X    Do not copy Extended Attributes (EAs) or resource forks.

  对于这个问题 nabble上的这个帖子有着很精简的回答 即在打包前先用cp -XR 拷贝出一份没有扩展属性的 然后再tar,对于大量文件传输来说这是最简单的办法,如果想手动去除掉文件的@属性 可以使用命令 xattr

$ xattr -l 1.txt
com.apple.metadata:kMDItemFinderComment:
0000   62 70 6C 69 73 74 30 30 50 08 00 00 00 00 00 00    bplist00P…….
0010   01 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00    …………….
0020   00 00 00 00 00 00 00 00 00 09                      ……….

$ xattr -d com.apple.metadata:kMDItemFinderComment 1.txt
$ xattr -l 1.txt

  此时就没有特殊属性了
命令集合

usage: xattr [-l] [-r] [-v] [-x] file [file ...]
xattr -p [-l] [-r] [-v] [-x] attr_name file [file ...]
xattr -w [-r] [-v] [-x] attr_name attr_value file [file ...]
xattr -d [-r] [-v] attr_name file [file ...]

The first form lists the names of all xattrs on the given file(s).
The second form (-p) prints the value of the xattr attr_name.
The third form (-w) sets the value of the xattr attr_name to the string attr_value.
The fourth form (-d) deletes the xattr attr_name.

options:
-h: print this help
-r: act recursively
-l: print long format (attr_name: attr_value and hex output has offsets and
ascii representation)
-v: also print filename (automatic with -r and with multiple files)
-x: attr_value is represented as a hex string for input and output

  举例:1:给文件加上@的扩展属性
  首先查询到需要添加的属性以及属性的值,它们是成对出现的,比如文字编码com.apple.TextEncoding: utf-8;可以使用xattr -l newfile2来查看。然后就是给文件加上扩展属性,使用命令:xattr -w 属性名 属性值 文件名 。比如给文件加上字符utf-8编码 :xattr -w com.apple.TextEncoding utf-8 newfile3,再查看一下文件,已经改变了。
  2:去掉文件的扩展属性
首先要查询到文件已经有的扩展属性,使用xattr -l 文件名 来查看,然后使用命令 xattr -d 属性名 文件名,就可以去掉了,比如去掉文件的文字编码:xattr -d com.apple.TextEncoding newfile3
  这个命令的内容很少,可以使用xattr -h命令来查看完整的内容。

  1. 还没有评论
评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks