如何在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
相关产品推荐
相关产品推荐

