无法在unzip
(utils
)功能中指定密码。我所知道的另一个函数getZip
(Hmisc
)仅适用于包含一个压缩文件的zip文件。
我想做这样的事情来解压缩Windows 8中foo.zip中的所有文件:
unzip("foo.zip", password = "mypass")
答案 0 :(得分:2)
我发现这个问题非常有用,但看到没有发布正式答案,所以这里有:
7z
命令。system("7z x secure.7z -pPASSWORD")
输入PASSWORD
。 我有多个压缩文件,而不是源代码中的密码显示或存储在任何文本文件中,所以我编写了以下脚本:
file_list <- list.files(path = ".", pattern = ".7z", all.files = T)
pw = readline(prompt = "Enter the password: ")
for (file in file_list) {
sys_command = paste0("7z ", "x ", file, " -p", pw)
system(sys_command)
}
当sourced将提示我输入密码,zip文件将循环解压缩。
答案 1 :(得分:1)
我发现@Kim的答案最终对我有用,但不是一开始。我以为我只会添加一些额外的链接/步骤来最终帮助我实现目标。
关闭并重新打开R,以便识别环境路径
如果在执行步骤1-3时已经打开了R,则需要关闭并重新加载R以使R识别7z的环境路径。 @ wush978对这个问题r system doesn't work when trying 7zip的回答提供了很多信息。我使用Sys.getenv(“ PATH”)来检查环境路径中是否包含7zip。
步骤4。我打开R并使用适当的密码键入system(“ 7z x secure.7z -pPASSWORD”)。
我实际上发现这行不通,因此我按照本文中的说明进行了一些修改,该说明还说明了如何指定输出目录https://stackoverflow.com/a/16098709/13678913。
如果已经解压缩了文件,则系统命令会提示您选择是否要使用存档中的文件替换现有文件,并提供选项 (Y)es /(N)o /(A)永远/(S)全部跳过/ A(u)重命名所有/(Q)uit?
因此,修改后的第4步(是,允许替换文件)
system("7z e -ooutput_dir secure.zip -pPASSWORD" Y)
将其全部作为一组经过修改的说明
Sys.getenv("PATH")
来检查环境中识别的7zip的路径(按照@ wush978对问题r system doesn't work when trying 7zip的回答)system("7z e -oC:/My Documents/output_dir secure.zip -pPASSWORD")
中输入适当的密码(按照https://stackoverflow.com/a/16098709/13678913的说明)这是@Kim简洁函数的修改版本(包括指定的输出目录并检查现有文件):
我的主脚本
output_dir <- "C:/My Documents/output_dir " #space after directory name is important
zippedfiles_dir <- "C:/My Documents/zippedfiles_dir/"
file_list <- paste0(output_dir , zippedfiles_dir , list.files(path = zippedfiles_dir, pattern = ".zip", all.files = T))
source("unzip7z.R")
源文件unzip7z.R内部的代码
pw = readline(prompt = "Enter the password: ")
for (file in file_list) {
csvfile <- gsub("\\.zip", "\\.csv", gsub(".*? ", "", file)) #csvfile name (removes output_dir from 'file' and replaces .zip extension with .csv)
#check if csvfile already exists in output_dir, and if it does, replace it with archived version and if it doesn't exist, continue to extract.
if(file.exists(csvfile)) {
sys_command = paste0("7z ", "e -o", file, " -p", pw, " Y")
} else {
sys_command = paste0("7z ", "e -o", file, " -p", pw)
}
system(sys_command)
}
答案 2 :(得分:0)
密码<-“您的密码”
system(command = paste0(“ unzip -o -P”,password,“”,“ yourfile.zip”), 等待= TRUE )
答案 3 :(得分:0)
密码←“您的密码”
read.table(text=system(paste0("unzip -p -P ", password, " yourfile.zip ", "yourfile.csv"),intern = "TRUE"),stringsAsFactors=FALSE,header=TRUE,sep=",")