创建没有扩展名的zip

时间:2011-11-07 04:15:11

标签: r zip

我想创建一个名为“out”而不是“out.zip”的zip文件。当我运行这一行时:

zip("out", zippedfiles)

其中zippedfiles是文件列表,我得到out.zip。我在Windows环境中这样做。

感谢。

2 个答案:

答案 0 :(得分:7)

有些人提到这是拉链的行为,但不是为什么这就是你所看到的原因。如果您查看zip()的来源或甚至帮助?zip,应该立即明确您所看到的行为来自系统zip功能而与R本身无关。所有R都调用系统函数进行压缩,默认情况下为zip

R> zip
function (zipfile, files, flags = "-r9X", extras = "", zip = Sys.getenv("R_ZIPCMD", 
    "zip")) 
{
    if (missing(flags) && (!is.character(files) || !length(files))) 
        stop("'files' must a character vector specifying one or more filepaths")
    args <- c(flags, shQuote(path.expand(zipfile)), shQuote(files), 
        extras)
    invisible(system2(zip, args, invisible = TRUE)) ## simply calling system command
}
<bytecode: 0x27faf30>
<environment: namespace:utils>

如果您对扩展程序感到恼火,请在致电file.rename()后发出zip()来电:

file.rename("out.zip", "out")

答案 1 :(得分:2)

对我来说,如果我将.(即句点)附加到文件名,则不会使用扩展名,例如out.应该有效。完整的表达方式:zip("out.", zippedfiles)

对于它的价值,这是由于zip的默认行为,并不是R或Windows的问题。


更新1:通常,最好避免使用特定于操作系统的方法。我认为如果代码在其他平台上运行,这种方法可能会产生问题。 Gavin的回答涉及重命名,更具可移植性。更重要的是,正如我在评论中所建议的那样,在重命名之前使用file.exists()测试目标是否存在,增加了另一层安全性。通过tempfile()获取临时文件名可获得额外的安全层。写入或重命名时避免名称冲突的另一种方法是在名称中使用时间戳。