不包含父目录的 zip 文件

7
当我运行这个代码时:
zip('C:\\path\\to\\dir\\out'
    , files = paste0('C:\\path\\to\\dir\\', c('one.xlsx', 'two.xlsx')))

它压缩文件,但解压缩后会得到一个包含“path”文件夹的文件夹,该文件夹包含“to”文件夹等(完整的目录路径)。因此,在解压缩后,文件现在位于 C:\\path\\to\\dir\\out\\path\\to\\dir\\

如何在不包含所有父文件夹的情况下压缩文件?

我正在使用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   

Ryan,也许你可以使用 withr::with_dir("/path/to/dir", zip("out.zip", c("one.xlsx","two.xlsx"))),其中 with_dir 只是暂时为调用 zip 设置工作目录。 - r2evans
1
但你已经包含了两个路径,即应该执行以下命令 zip('C:\\path\\to\\dir\\out', files = c('one.xlsx', 'two.xlsx')) - Onyambu
1
我同意Onyambu的观点。另一种方法是在flags参数中包含“j”标志以删除路径,即在zip调用中包含flags ='-r9Xj'作为参数。 - icj
@icj,flags选项起作用了。请随意发布为答案。 - IceCreamToucan
@icj,我在哪里可以了解更多关于这些标志的信息? - IceCreamToucan
@Ryan,请看下面的答案。 - icj
1个回答

13
根据文档,R zip函数使用R_ZIPCMD,它在etc/Rcmd_environ中设置。默认情况下,它设置为命令行zip Windows实用程序。 R函数提供输入参数flags以将其他输入参数传递给基础命令行zip函数。可以通过此处下载描述标志的手册。 -j标志允许仅存储文件名,而不是完整文件路径。
f_path <- 'C:\\path\\to\\dir\\out'
zip(f_path,
    files = paste0(f_path, c('one.xlsx', 'two.xlsx')),
    flags = '-r9Xj')

-r9X部分是传递给底层实用程序的默认参数,并指定zip命令应递归搜索子目录,使用最大压缩并删除已弃用的文件字段。

这只在Windows zip实用程序上进行了测试。在使用Unix实用程序时,必要的标志可能会有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接