zip 文件不包含父目录

Ice*_*can 7 zip r

当我运行这个时

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 实用程序时,必要的标志可能会有所不同。