有人知道为什么tar
不包括名为.__init__.py
(注意点)的文件吗?
$ mkdir /tmp/work && cd /tmp/work
$ mkdir foo
$ touch foo/.__init__.py
$ touch foo/.namespace__init__.py
$ tar czf foo.tar.gz foo
$ mkdir e && mv foo.tar.gz e/ && cd e/
$ tar zxf foo.tar.gz
$ ls -al foo/
total 0
drwxr-xr-x 2 sridharr wheel 102 14 Mar 17:16 .
drwxr-xr-x 3 sridharr wheel 136 14 Mar 17:17 ..
-rw-r--r-- 1 sridharr wheel 0 14 Mar 17:16 .namespace__init__.py
$
$ echo ".__init__.py file is missing. WTF? This is OSX 10.6"
更新:tar 似乎忽略了以._
字符开头的文件;为什么?
更新 2:我无法在 Linux 上重现此问题。
答案1
找到解决方案了。在 Apple 系统上,以 开头的文件._
包含资源分叉另一个文件的副本。它们不是可以复制和移动的普通文件。
答案2
有一些未记录的(?)环境变量可用于禁用扩展属性和/或资源分支的特殊处理柏油(和帕克斯,无论其价值如何)。同步有-E
/--extended-attributes
选项可以启用(!)这种处理方式——但在某些非苹果同步s 的-E
意思--executability
则是。
在 Mac OS X 10.4(创建这些 AppleDouble 编码._*
档案成员的第一个版本)上,环境变量是COPY_EXTENDED_ATTRIBUTES_DISABLE
。在 Leopard 和 Snow Leopard 中,变量是COPYFILE_DISABLE
。通常只需设置变量。任何值都可以(甚至是空字符串),但true
似乎是传统的。因此:
COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true tar …
设置此变量有以下效果:
- 创建/更新档案时:
._*
防止在归档具有扩展属性的文件时创建归档成员。._*
允许在存档实际文件时创建存档成员._*
。
- 提取档案时:
- 将
._*
档案成员提取为纯文本文件,而不是将扩展属性恢复到相关文件。
- 将
简而言之,设置这些变量使得柏油等的操作就像在 Linux 上一样。
如果您很少需要存档具有扩展属性或资源分支的文件,并且可能需要存档或提取实际._*
文件,那么您可以考虑在您的一个 shell 初始化文件中设置和导出这些变量:
# Tell tar, pax, etc. on Mac OS X 10.4+ not to archive
# extended attributes (e.g. resource forks) to ._* archive members.
# Also allows archiving and extracting actual ._* files.
COPY_EXTENDED_ATTRIBUTES_DISABLE=true COPYFILE_DISABLE=true
export COPY_EXTENDED_ATTRIBUTES_DISABLE COPYFILE_DISABLE
这些._*
文件还用于存储不支持扩展属性的文件系统(最常见的是 FAT 变体)上的扩展属性。这些变量在处理._*
其他文件系统上的文件时不会真正有帮助,只是档案。
Mac OS X 中使用的 HFS+ 文件系统完全能够存储实际._*
文件,因此一旦您使用变量将文件提取到文件系统,就可以通过所有正常方式正确访问这些文件。
答案3
我无法在 Debian 5.0 主机上复制此内容。也许您使用的系统上安装的 tar 版本存在错误?您使用的 *nix 是哪个版本?
$ mkdir foo
$ touch foo/.namespace__init__.py
$ touch foo/.__init__.py
$ tar -czvf foo.tar.gz foo/
foo/
foo/.namespace__init__.py
foo/.__init__.py
$ # example the file
$ tar -tzvf foo.tar.gz
drwxr-xr-x cfrancy/cfrancy 0 2010-03-14 17:34 foo/
-rw-r--r-- cfrancy/cfrancy 0 2010-03-14 17:34 foo/.namespace__init__.py
-rw-r--r-- cfrancy/cfrancy 0 2010-03-14 17:34 foo/.__init__.py