当我在 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 copyfile
ls -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 次 |
最近记录: |