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 文件的路径名:将执行波浪号扩展(请参阅 |
files |
要归档的文件路径的字符向量:默认为归档当前目录下的所有文件。 |
compression |
给出要使用的压缩类型的字符串(默认无)。可以缩写。 |
compression_level |
整数:压缩级别。仅用于内部方法。 |
tar |
字符串:要使用的命令的路径。如果命令本身包含空格,则需要用引号引起来(例如,用 |
extra_flags |
外部 |
细节
这是一个包装器tar
命令或使用内部实现R。如果使用后者tarfile
是一个连接或者如果参数tar
是"internal"
或者""
(默认为“factory-fresh”)。请注意,虽然 Unix 类似版本R设置环境变量TAR,它的值不是该函数的默认值。
参数extra_flags
被传递到外部tar
也是依赖于平台的。可能有用的值包括-H(遵循符号链接,也-L在某些平台上),‘--acls’,--exclude-backups,--exclude-vcs(和类似)和 Windows 上--force-local(因此驱动器可以包含在文件路径中)。Rtools
4 及更早版本包括tar
其中使用了--force-local, 但Rtools
4.2 包括原始 GNUtar
,默认情况下不使用它。
为 GNU 设置选项的便捷且可靠的方法tar
是通过环境变量TAR_OPTIONS。追加--force-local到TAR不适用于 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
后扩展文件列表。 (它确实适用于默认的内部方法。)
值
内部版本的 system
或 0
的返回代码是不可见的。
可移植性
‘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
会尝试gnutar
和gtar
前tar
.
已知问题源自
-
超过100字节的文件路径的处理。这些在
tar
的早期版本中不受支持,并且以一种方式由 POSIXtar
支持,以另一种方式由 GNUtar
以及另一种方式由最近的tar
程序经常支持的 POSIXpax
命令支持。内部实现对超过 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 中,名称前缀为“._’,并将这些文件解压到资源分支中(如果可能的话):其他解压方式(包括untar
在R)将它们解压为单独的文件。
当争论时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 toLatex 将 R 对象转换为 BibTeX 或 LaTeX
- R type.convert 将数据转换为适当的类型
- R txtProgressBar 文本进度条
- R select.list 从列表中选择项目
- R COMPILE 编译用于 R 的文件
- R readRegistry 读取 Windows 注册表配置单元
- R browseVignettes 在 HTML 浏览器中列出晕影
- R hasName 检查姓名
- R nsl 按主机名查找 IP 地址
- R edit 调用文本编辑器
- R create.post 准备电子邮件和帖子的辅助函数
- R hsearch-utils 帮助搜索实用程序
- R download.packages 从类似 CRAN 的存储库下载软件包
- R DLL.version MS Windows 上的 DLL 版本信息
- R ls.str 列表对象及其结构
- R Rscript R 前端脚本
- R bug.report 发送错误报告
- R PkgUtils 用于构建和检查附加包的实用程序
- R cite 引用参考书目条目
- R SweaveSyntConv 转换 Sweave 语法
- R RSiteSearch 搜索文档中的关键词或短语
- R glob2rx 将通配符或通配符模式更改为正则表达式
- R getFromNamespace 用于开发命名空间的实用函数
- R demo R 函数演示
- R mirrorAdmin 管理存储库镜像
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Create a Tar Archive。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。