当我运行这个时
zip('C:\\path\\to\\dir\\out'
, files = paste0('C:\\path\\to\\dir\\', c('one.xlsx', 'two.xlsx')))
Run Code Online (Sandbox Code Playgroud)
它压缩文件,但解压缩它们会产生一个包含“path”文件夹的文件夹,其中包含“to”文件夹等(完整目录路径)。所以解压后,文件现在在C:\\path\\to\\dir\\out\\path\\to\\dir\\.
如何在生成的 zip 文件不包含所有父目录的情况下压缩文件?
我使用的是 Windows 10
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 4.2
year 2017
month 09
day 28
svn rev 73368
language R
version.string R version 3.4.2 (2017-09-28)
nickname Short Summer
Run Code Online (Sandbox Code Playgroud)
icj*_*icj 14
根据文档,R zip 函数的用途R_ZIPCMD是在etc/Rcmd_environ. 默认情况下,它设置为命令行zipWindows 实用程序。R 函数提供输入参数标志,以将其他输入参数传递给底层命令行 zip 函数。描述标志的手册可以在这里下载。
该-j标志只允许存储文件名而不是完整的文件路径。
f_path <- 'C:\\path\\to\\dir\\out'
zip(f_path,
files = paste0(f_path, c('one.xlsx', 'two.xlsx')),
flags = '-r9Xj')
Run Code Online (Sandbox Code Playgroud)
标志输入部分-r9X是传递给底层实用程序函数的默认参数,并指定 zip 命令应递归搜索子目录、使用最大压缩并删除已折旧的文件字段。
仅使用 Windows zip 实用程序对此进行了测试。使用 unix 实用程序时,必要的标志可能会有所不同。