获取 mac tar 以停止将 ._* 文件名放入 tar 存档

vy3*_*y32 47 metadata filesystems tar macos

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

我在 Mac 上创建了 autoconf 脚本。当 tar 运行时,它会将所有这些 ._ foob​​ar名称放入存档中:

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
Run Code Online (Sandbox Code Playgroud)

现在发生的事情是 Apple 的 HFS 文件系统将文件属性放在 ._ foob​​ar名称中,以便它们可以在另一个 Mac 系统上恢复。但我不想要它们——它们对我来说只是垃圾。有什么办法可以压制他们吗?

Chr*_*sen 76

根据另一个问题的答案,您可以设置未记录的(?) 环境变量 COPYFILE_DISABLE 以防止多个系统提供的程序(包括tar)赋予._*存档成员特殊含义。特别是,它将防止他们:

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

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

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

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

COPYFILE_DISABLE=1 tar cf new.tar …
Run Code Online (Sandbox Code Playgroud)

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

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE
Run Code Online (Sandbox Code Playgroud)

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

(unset COPYFILE_DISABLE; tar cf somefile.tar …)
Run Code Online (Sandbox Code Playgroud)

在这个 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 以同样的方式工作。


归档时间:

查看次数:

26698 次

最近记录:

14 年,6 月 前