当我在 OS X 中 tar 某些文件时:
tar cvf foo.tar foo
Run Code Online (Sandbox Code Playgroud)
它会._foo在 tarball 中生成一个额外的文件:
./._foo
foo
Run Code Online (Sandbox Code Playgroud)
只有当我在非 Mac 操作系统上提取它时才会显示。但是._foo在我的文件系统上不存在!这是怎么回事?我怎样才能摆脱它?
Jes*_*der 85
OS X 的 tar 使用 AppleDouble 格式来存储扩展属性和 ACL。
$ touch file1 file2 file3
$ xattr -w key value file1
$ chmod +a 'admin allow delete' file2
$ ls -le@ *
-rw-r--r--@ 1 lauri staff 0 May 25 07:09 file1
key 5
-rw-r--r--+ 1 lauri staff 0 May 25 07:09 file2
0: group:admin allow delete
-rw-r--r-- 1 lauri staff 0 May 25 07:09 file3
$ tar -cf 1.tar *
$ tar -tf 1.tar
./._file1
file1
./._file2
file2
file3
Run Code Online (Sandbox Code Playgroud)
OS X 的 tar 也知道如何将 ._ 成员转换回本机格式,但 ._ 文件通常在其他平台上提取存档时保留。您可以通过将 COPYFILE_DISABLE 设置为某个值来告诉 tar 不包含元数据:
$ COPYFILE_DISABLE=1 tar -cf 2.tar file*
$ tar -tf 2.tar
file1
file2
file3
Run Code Online (Sandbox Code Playgroud)
man copyfilels -l@显示扩展属性的键和大小,ls -le打印 ACLxattr -l 列出扩展属性的键和值xattr -c 清除所有扩展属性(-d 不能单独使用)chmod -N 删除 ACL作为扩展属性存储的信息:
小智 16
从bsdtar 3.0.3 - libarchive 3.0.3(也许更早)开始,该bsdtar命令有一个新选项,--disable-copyfile用于禁止创建._文件。
# on Mac OS X
# /usr/bin/tar -> bsdtar
ls -l /usr/bin/tar
# from man bsdtar
--disable-copyfile
Mac OS X specific. Disable the use of copyfile(3).
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30417 次 |
| 最近记录: |