使用untar函数解压Shiny Web App文件返回错误代码1的问题咨询

报错排查与解决
核心报错原因
错误码1首先来自文件读取失败,注意报错第一行显示的目标文件路径:/Users/filepath/Downloads/ad2007308f644d078ec59ce84d31ce7f .tar 文件名末尾多了一个空格,先检查下载的tar文件实际名称是否存在多余空格、存储路径是否包含中文、空格、Emoji等非ASCII特殊字符,Mac系统对路径转义的要求比Windows严格,很容易因路径识别错误无法读取文件。
Mac与PC端untar的差异
untar属于R内置utils包的函数,无需额外安装依赖包,两端的功能差异本质来自默认调用的tar工具不同:
- Windows端R默认使用内置的GNU tar实现,兼容性更强,对非标准打包的tar文件容错率更高
- 新Mac(macOS Ventura及以上版本)默认自带BSD tar,参数规则、压缩格式支持都和GNU tar有区别,遇到Shiny服务端打包的tar文件时容易出现兼容性报错
修复方案
调用untar时显式指定使用R内置的tar实现,跳过系统自带的tar工具即可抹平跨平台差异:
untar( tarfile = "/Users/你实际的文件存储路径/ad2007308f644d078ec59ce84d31ce7f.tar", exdir = "/Users/你期望的解压输出路径", tar = "internal" )
如果下载的是gzip压缩的tar包,额外添加compressed = "gzip"参数明确指定压缩格式即可。
untar使用注意事项
- 路径尽量统一使用英文,避免包含空格、特殊字符,从根源规避不同系统的路径转义差异问题
- 新Mac需要先在系统设置「隐私与安全性」-「文件和文件夹」中给R/RStudio授予下载文件夹、目标输出文件夹的读写权限,否则也会因权限不足返回错误码1
- 解压前可以用
file.size()核对下载的tar文件大小,确认文件下载完整没有损坏,避免因下载丢包导致解压失败 - 要写跨平台兼容的解压代码,固定添加
tar = "internal"参数即可统一不同系统的解压逻辑,无需适配系统自带的tar工具
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

