当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R tar 创建 Tar 存档


R语言 tar 位于 utils 包(package)。

说明

创建一个 tar 存档。

用法

tar(tarfile, files = NULL,
    compression = c("none", "gzip", "bzip2", "xz"),
    compression_level = 6, tar = Sys.getenv("tar"),
    extra_flags = "")

参数

tarfile

tar 文件的路径名:将执行波浪号扩展(请参阅 path.expand )。或者,connection 可用于二进制写入。

files

要归档的文件路径的字符向量:默认为归档当前目录下的所有文件。

compression

给出要使用的压缩类型的字符串(默认无)。可以缩写。

compression_level

整数:压缩级别。仅用于内部方法。

tar

字符串:要使用的命令的路径。如果命令本身包含空格,则需要用引号引起来(例如,用 shQuote ) - 但参数 tar 也可能包含用空格与命令分隔的标志。

extra_flags

外部 tar 的任何额外标志。

细节

这是一个包装器tar命令或使用内部实现R。如果使用后者tarfile是一个连接或者如果参数tar"internal"或者""(默认为“factory-fresh”)。请注意,虽然 Unix 类似版本R设置环境变量TAR,它的值不是该函数的默认值。

参数extra_flags被传递到外部tar也是依赖于平台的。可能有用的值包括-H(遵循符号链接,也-L在某些平台上),‘⁠--acls⁠’,--exclude-backups,--exclude-vcs(和类似)和 Windows 上--force-local(因此驱动器可以包含在文件路径中)。Rtools4 及更早版本包括tar其中使用了--force-local, 但Rtools4.2 包括原始 GNUtar,默认情况下不使用它。

为 GNU 设置选项的便捷且可靠的方法tar是通过环境变量TAR_OPTIONS。追加--force-localTAR不适用于 GNUtar由于某些选项的混合方式受到限制。这tar可在 Windows 10 上使用(libarchive 的bsdtar) 默认支持驱动器号。它不支持--force-local,但忽略TAR_OPTIONS.

对于 GNUtar,--格式=ustar强制采用更便携的格式。 (默认值是在编译时设置的,并将显示在输出的末尾tar --help:对于版本 1.30 ‘out-of-the-box’ 是--格式=gnu,但手册说目的是改为--格式=posix这与以下相同pax- 它从来都不是 POSIX 标准的一部分tar并且不应该使用。)对于 libarchive 的bsdtar,--格式=ustar比默认的更便携。

可能导致外部命令失败的一个问题是命令行对于系统 shell 来说太长:R3.5.0 如果检测到外部命令是 GNU,则可以解决此问题tar或libarchivetar(又名bsdtar)。

请注意,files = '.' 通常无法与外部 tar 一起使用,因为这会在创建 tarfile 后扩展文件列表。 (它确实适用于默认的内部方法。)

内部版本的 system0 的返回代码是不可见的。

可移植性

‘tar’ 格式不再有商定的标准! “Unix Standard Tar”是 POSIX 1003.1:1998 的一部分,但已被删除,以支持 pax ,并且无论如何,许多常见的实现都偏离了以前的标准。

许多R平台使用 GNU 版本tar,但每个版本的行为似乎都发生了变化。 macOS >= 10.6、FreeBSD 和 Windows 10 使用bsdtar来自 libarchive 项目(但对于 macOS 为 2017 年或更早版本,对于 High Sierra 为 2010 年),商业 Unix 将有自己的版本。bsdtar适用于许多其他平台:macOS 至少 10.9 有 GNUtar作为gnutar以及其他平台,例如Solaris,将其作为gtar: 在类 Unix 系统上configure会尝试gnutargtartar.

已知问题源自

  • 超过100字节的文件路径的处理。这些在 tar 的早期版本中不受支持,并且以一种方式由 POSIX tar 支持,以另一种方式由 GNU tar 以及另一种方式由最近的 tar 程序经常支持的 POSIX pax 命令支持。内部实现对超过 100 字节的路径发出警告,如果可能,使用 1998 POSIX 标准中的 ‘ustar’ 方式,最多支持 256 字节(取决于路径:特别是最终组件限制为 100 字节),否则GNU 方式(得到广泛支持,包括 untar )。

    大多数格式不记录文件路径的编码。

  • (文件)链接。 tar 是在使用硬链接的操作系统上开发的,在要包含的文件列表中多次引用的物理文件仅包含一次,其余实例将作为链接添加。后来添加了包含符号链接的方法。内部实现仅支持符号链接(在支持它们的操作系统上)。当然,问题是如何在不支持链接的操作系统上解压链接:对于常规文件,可以使用文件副本。

    ‘ustar’ 格式的链接名称限制为 100 个字节。有一个针对任意长链接名称的 GNU 扩展,但 bsdtar 会忽略它。内部方法使用 GNU 扩展,并带有警告。

  • 标头字段,特别是字段未满或未使用时要使用的填充。 POSIX 确实定义了正确的行为,但常用的实现确实(并且仍然)不符合。

  • 文件大小。 ‘ustar’ 格式每个(未压缩)文件的大小限制为 8GB。

为了可移植性,请避免超过 100 字节的文件路径和所有链接(尤其是目录的硬链接和符号链接)。

与 GNU 不同,内部实现仅写入所需的 512 字节块(包括 nul 的尾随块)tar默认情况下用‘填充⁠无⁠’ 为 20 块 (10KB) 的倍数。 pad 的实现在块填充是否应在压缩之前或之后(或两者)发生方面有所不同:填充旨在提高物理磁带驱动器的性能。

‘ustar’ 格式以 1 秒的分辨率记录文件修改时间:在具有更高分辨率的文件系统上,通常会丢弃小数秒。

压缩

当外部tar使用命令时,压缩 tar 存档需要tar支持-z,-j或者-J标志,并且可能需要适当的命令(gzip,bzip2或者xz)可用。对于 GNUtar,可以通过例如指定进一步的压缩程序extra_flags = "-I lz4"。某些版本的bsdtar接受选项,例如--lz4,--lzop--lrzip或外部压缩机通过 --use-compress-program lz4:这些可以在extra_flags.

NetBSD 8.0 之前使用标志--xz而不是-J,所以应该使用这个通过 extra_flags = "--xz"而不是compression = "xz"。 OpenBSD 和 Heirloom Toolchest 中的命令未记录为支持xz.

商业Unixen(例如AIX 和Solaris)中的tar 程序不支持压缩。

注意

对于 macOS 用户。 Apple 的文件系统有一个可追溯到经典 Mac OS 的“资源分叉”概念,如今很少使用。苹果的版本tar将它们作为单独的文件存储在 tarball 中,名称前缀为“._’,并将这些文件解压到资源分支中(如果可能的话):其他解压方式(包括untarR)将它们解压为单独的文件。

当争论时tar设置为命令tar在 macOS 上,环境变量COPYFILE_DISABLE=1已设置,对于系统版本tar防止这些单独的文件包含在 tarball 中。

也可以看看

https://en.wikipedia.org/wiki/Tar_(file_format), https://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06 for the way the POSIX utility pax handles tar formats.

https://github.com/libarchive/libarchive/wiki/FormatTar.

untar

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Create a Tar Archive。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。