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


R untar 提取或列出 Tar 档案


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

说明

从 tar 存档中提取文件或列出 tar 存档的内容。

用法

untar(tarfile, files = NULL, list = FALSE, exdir = ".",
      compressed = NA, extras = NULL, verbose = FALSE,
      restore_times =  TRUE,
      support_old_tars = Sys.getenv("R_SUPPORT_OLD_TARS", FALSE),
      tar = Sys.getenv("TAR"))

参数

tarfile

tar 文件的路径名:将执行波浪号扩展(请参阅 path.expand )。或者,connection 可用于二进制读取。对于压缩的 tarfile ,如果要使用连接,则应由 gzfile(.) 创建连接(或 gzcon(.) 目前仅适用于 "gzip"gzfile() 适用于 tar() 中可用的所有压缩)。

files

要提取的记录文件路径的字符向量:默认为提取所有文件。

list

如果是 TRUE ,则列出文件(相当于 tar -tf )。否则提取文件(相当于 tar -xf )。

exdir

将文件提取到的目录(相当于 tar -C )。如有必要,它将被创建。

compressed

(不建议使用 auto-detection,仅用于外部 tar 命令。)逻辑或字符串。值 "gzip""bzip2""xz" 选择该压缩形式(并且可以缩写为第一个字母)。 TRUE 表示 gzip 压缩,FALSE 无已知压缩,NA(默认)表示从文件头推断类型。

外部命令可能会忽略所选的压缩类型,但会自动检测类型。

extras

NULL或字符串:进一步的命令行标志,例如-p传递给外部tar程序。

verbose

逻辑:如果为 true,则回显用于外部 tar 程序的命令。

restore_times

合乎逻辑的。如果 true(默认)恢复文件修改时间。如果为假,则相当于-m旗帜。 tarball 中的时间应该是 UTC,但 tarball 已提交给 CRAN,时间为未来或遥远的过去:此参数允许丢弃此类时间。

请注意,tarball 中的文件时间以 1 秒的分辨率存储,并且只能恢复到文件系统支持的分辨率(在 FAT 系统上为 2 秒)。

support_old_tars

合乎逻辑的。如果为 false(默认值),则假定外部 tar 命令能够处理压缩的 tarfile,如果 compressed 未指定它,则自动检测压缩类型。 (自 2009 年起,主要实现已这样做;对于 GNU tar 自版本 1.22 起。)

如果属实,则R代码调用适当的解压缩器并将输出传输到tar, 为了compressed = NA检查 tar 文件头以确定压缩类型。

tar

字符串:要使用的命令的路径或"internal"。如果命令本身包含空格,则需要用引号引起来 - 但 tar 也可以包含由空格与命令分隔的标志。

细节

这是一个包装器tar命令或用于编写的内部实现R。如果使用后者tarfile是一个连接或者如果参数tar"internal"或者""(除了在 Windows 上,当tar.exe首先尝试)。

除非另有说明,支持三种类型的 tar 文件压缩: gzipbzip2xz

支持哪些选项取决于所使用的 tar 实现:"internal" 旨在以一种独立于平台的方式为大多数选项提供支持。

GNU 焦油:

现代 GNU tar 版本支持压缩档案,并且自 1.15 起能够自动检测压缩类型:1.22 版本添加了对 xz 压缩的支持。

在类似 Unix 系统上,configure将设置环境变量TAR,如果找到的话更喜欢 GNU tar。

bsdtar

macOS 10.6 及更高版本(以及 FreeBSD 和其他一些操作系统)具有来自 libarchive 项目的 tar,它会自动检测所有三种形式的压缩(即使在 macOS 中未记录)。

网络BSD:

NetBSD 的情况没有记录tar可以自动检测压缩:对于 8 之前的版本,标志为xz压缩是--xz不是-J.所以support_old_tars = TRUE推荐(或使用bsdtar如果已安装)。

打开BSD:

OpenBSD 的 tar 不会自动检测压缩。除了报告文件是 xz 压缩之外,它不支持 xz。所以推荐support_old_tars = TRUE

传家宝工具箱:

tar 会自动检测 gzipbzip2 压缩(未记录),但不支持 xz 压缩。

较旧的支持:

环境变量R_GZIPCMD给出解压命令gzip文件,以及R_BZIPCMD为了bzip2文件。 (在类似 Unix 系统上,如果找到的话,它们会在安装时设置。)xz如果可用则使用:如果不可用,则解压预计会失败。

参数compressedextrasverbose 仅在使用外部tar 时使用。

一些外部tar命令将检测一些lrzip,lzma,lz4,lzopzstd压缩除了gzip,bzip2xz。 (对于一些外部tar命令,只有在适当的实用程序可用时才能读取压缩的 tar 文件。)对于 GNUtar,进一步的(解)压缩程序可以通过例如指定extras = "-I lz4"。为了bsdtar这可能是extras = "--use-compress-program lz4"。大多数命令都会检测(现在很少见)‘.tar.Z' 压缩的档案compress.

内部实现将符号链接恢复为类 Unix 上的链接,以及 Windows 上的文件副本(仅适用于现有文件,不适用于目录),并将硬链接恢复为链接。如果链接操作失败(在 FAT 文件系统上可能如此),则会尝试文件复制。由于它使用 gzfile 读取文件,因此它可以处理通过函数可以处理的任何方法压缩的文件:至少 compressgzipbzip2xz 压缩,以及某些类型的 lzma 压缩。它不会像某些 tar 实现那样防止恢复绝对文件路径。如有必要,它将为存档中的目录或文件创建父目录。它处理 USTAR/POSIX、GNU 和 pax 处理超过 100 字节的文件路径的方式,以及处理超过 100 字节的链接目标的 GNU 方式。

您可能会看到来自内部实施的警告,例如

    unsupported entry type 'x'

这通常表明存档无效:允许条目类型 "A-Z" 作为扩展,但保留其他类型。对于这样的存档,您唯一能做的就是找到处理它的 tar 程序,并仔细查看生成的文件。也可能有警告

    using pax extended headers

这表明附加信息可能已被丢弃,例如 ACL、编码......

以前的标准仅支持 ASCII 文件名(实际上,仅支持字母数字加句点、下划线和连字符)。 untar 不会尝试将文件名映射到当前系统上可接受的文件名,并将存档中的文件名视为适用,而无需在当前区域设置中进行任何重新编码。

内部实现不会在 macOS 中special-case“资源分叉”:该系统的tar命令执行。这可能会导致名称带有前缀“的意外文件”._’。

如果是 list = TRUE ,则为 tar 存档中包含的文件的(相对或绝对)路径的字符向量。

否则,从 system 与外部 tar0L 的返回代码是不可见的。

也可以看看

tarunzip

相关用法


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