让 mac tar 停止将 ._* 文件名放入 tar 档案中

让 mac tar 停止将 ._* 文件名放入 tar 档案中

可能重复:
为什么我在 OS X 上的 tarball 中会得到像 ._foo 这样的文件?

我在 Mac 上创建了 autoconf 脚本。当 tar 运行时,它会将所有这些 ._福巴档案中的名称:

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

现在发生的情况是,Apple 的 HFS 文件系统将文件属性放在 ._ 中福巴名称,以便它们可以在另一台 Mac 系统上恢复。但我不需要它们 --- 它们对我来说只是垃圾。有什么方法可以抑制它们吗?

答案1

对另一个问题的回答,您可以设置未记录的(?)环境变量COPYFILE_DISABLE来阻止几个系统提供的程序(包括柏油)赋予._*档案成员特殊含义。具体来说,它将阻止他们:

  • 将扩展属性数据(包括资源分支)存储在._*档案成员中
    (即不要“污染”在 Mac OS X 上创建但用于其他系统上的档案),以及

  • 尝试从名为的档案成员中提取扩展属性或资源._*
    (即不要误解._*其他系统档案中的档案成员)。

您为环境变量使用的值并不重要(它甚至可以是空字符串)。诸如0、 和 之类的值false不会重新启用该功能。唯一重要的是变量是否已设置(您必须“取消设置”它才能重新启用该功能)。

您可以利用 Bourne 风格 shell 的功能在单个命令上使用此变量(狂欢等)为命令添加额外的环境变量前缀。

COPYFILE_DISABLE=1 tar cf new.tar …

如果您经常遇到这个问题,那么您可能需要在 shell 的初始化文件中设置并导出此变量。

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

当您需要时,您可以取消设置各个命令的变量。

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

在这个 Mac OS X 10.6 系统上,以下命令似乎都知道 COPYFILE_DISABLE:

  • /usr/bin/tar(指向 的符号链接bsdtar
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE 起源于 Mac OS X 10.5。如果您需要支持 10.4,它具有以相同方式工作的 COPY_EXTENDED_ATTRIBUTES_DISABLE。

答案2

虽然不是专家,但通过谷歌搜索发现了这一点: http://www.ofzenandcomputing.com/zanswers/3422

和这个: http://hintsforums.macworld.com/archive/index.php/t-28703.html

第二条命令看起来可以合并到脚本中……您可能无法阻止创建资源分支文件,但之后您可以自动删除它们。

编辑:我应该提到这可能会产生不好的后果,请自行承担风险。

答案3

您可以尝试编译自己的tar,或者从 Macports 或 Fink(如果可用)安装它(Homebrew 没有)。如果“运气好”,它应该不知道 OS X 元数据,并跳过创建这些文件。

相关内容