‘tar’ 中存在奇怪的错误,不包含名为 .__init__.py 的文件

‘tar’ 中存在奇怪的错误,不包含名为 .__init__.py 的文件

有人知道为什么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

相关内容