You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中使用tar()压缩文件且不保留目录结构?

解决R中tar()函数压缩时保留冗余目录结构的问题

问题根源是你使用full.names = TRUE获取了文件的完整绝对路径,tar()函数会默认保留这些路径的层级结构。要仅压缩文件本身而不带目录层级,推荐以下两种方法:

方法一:切换工作目录到文件所在位置

通过切换到目标文件的目录,仅传入文件名(不带路径)进行压缩,之后恢复原工作目录,这是跨平台最可靠的方案:

# 保存当前工作目录
original_wd <- getwd()

# 切换到临时目录(待压缩文件所在的目录)
setwd(tempdir())

# 获取当前目录下的文件名(不包含完整路径)
files_to_compress <- dir(full.names = FALSE)

# 指定压缩包输出路径并执行压缩
f <- "C:/TEMP/tarfile.tar.gz"
tar(tarfile = f, files = files_to_compress, compression = "gzip")

# 恢复原来的工作目录
setwd(original_wd)

方法二:利用系统tar命令的路径剥离选项(兼容性稍弱)

如果你的R环境依赖系统自带的tar命令,可以通过options参数传递--strip-components选项,移除多余的目录层级。需要先计算临时目录的层级数:

f <- "C:/TEMP/tarfile.tar.gz"
files_to_compress <- dir(path=tempdir(), full.names = TRUE)

# 计算临时目录的路径层级数(按路径分隔符拆分后统计长度)
strip_levels <- length(strsplit(tempdir(), "/|\\\\")[[1]])

# 传递tar命令选项,剥离对应层级的目录
tar(tarfile = f, files = files_to_compress, compression = "gzip", 
    options = paste("--strip-components", strip_levels))

注意:方法二仅在系统tar支持--strip-components选项时有效(如Linux/macOS的GNU tar,或Windows下的Git Bash tar等),跨平台兼容性不如方法一,优先选择方法一。

内容的提问来源于stack exchange,提问作者smoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:58:23