有谁知道为什么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"
Run Code Online (Sandbox Code Playgroud)
更新:tar 似乎忽略了以._字符开头的文件;为什么?
更新 2:我无法在 Linux 上重现这个。
有一些未记录的(?)环境变量可用于禁用tar(和pax,它的价值)中扩展属性和/或资源分支的特殊处理。rsync有-E/--extended-attributes选项来启用(!)这种处理——但在一些非 Apple rsync 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 …
Run Code Online (Sandbox Code Playgroud)
设置这个变量有以下效果:
._*在归档具有扩展属性的文件时防止创建归档成员。._*在归档实际._*文件时创建归档成员。._*归档成员被提取为纯文件,而不是将扩展属性恢复到相关文件。简而言之,设置这些变量会使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
Run Code Online (Sandbox Code Playgroud)
这些._*文件还用于在不支持它们的文件系统上存储扩展属性——最常见的是 FAT 变体。这些变量在处理._*其他文件系统上的文件时并没有真正的帮助,只是档案。
Mac OS X 中使用的 HFS+ 文件系统完全能够存储实际._*文件,因此一旦您使用变量将文件提取到文件系统,就可以通过所有正常方式正确访问文件。
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |