Answers:
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
OS X的tar也知道如何将._成员转换回本机格式,但是._文件通常是在其他平台上提取归档文件时保留的。您可以通过将COPYFILE_DISABLE设置为某个值来告诉tar不包含元数据:
$ COPYFILE_DISABLE=1 tar -cf 2.tar file*
$ tar -tf 2.tar
file1
file2
file3
man copyfile
ls -l@
显示扩展属性的键和大小,ls -le
打印ACLxattr -l
列出扩展属性的键和值xattr -c
清除所有扩展属性(-d不能单独使用)chmod -N
删除ACL信息存储为扩展属性:
env COPYFILE_DISABLE tar -cf archive.tar my_folder/
。
cat
或type
可以看到里面的东西。通常是在此处手动输入的简单文本。我不会丢弃它进行备份,但是如果您想跨平台分发某些内容,尤其是如果错误地将其放置在那里,则可能会很浪费。只是说离开他们的选择是非常有效的。
从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).
bsdtar 2.8.3 - libarchive 2.8.3
中10.7.5
的--disable-copyfile
未记录,但仍然可用。
如._
其他答案中所述,这些文件是资源分支。但是,使用时有更好的方法摆脱它们tar
:
export COPYFILE_DISABLE=true
tar cvf foo.tar foo
还有一个dot_clean
用于清理这些文件的实用程序(我认为它通常用于外部存储)。
这是用于删除这些文件的python脚本。应该可以在任何流行的OS中使用。
未经彻底测试,使用风险自负!
import os
import os.path
def dot_clean(folder):
files = os.listdir(folder)
for file in files:
full_name = folder + "/" + file
if os.path.isdir(full_name):
dot_clean(full_name)
elif file.startswith("._"):
os.remove(full_name)
dot_clean('.')
在Mac平台上,句点字符“。”用作隐藏文件指示符。在Windows上,它是“ $”字符。无论如何,._ foo文件可能包含某些OS X特定的信息,建议不要删除它。在其他系统上,您将不得不忽略它,否则此处的某人可能会为您提供一个脚本,该脚本将隐藏以“。”开头的文件和文件夹。