尝试使用R。
从一个文件夹创建一个zip文件这里提到“Rcompression”包: Creating zip file from folders
但我没有找到可以为Windows系统下载此软件包的地方。
有什么建议吗?或其他函数来创建一个zip文件?
答案 0 :(得分:18)
您可以非常轻松地使用zip
包中的函数utils
创建一个zip文件。假设您有一个目录testDir
并且您希望在目录中压缩文件(或多个文件),
dir('testDir')
# [1] "cats.csv" "test.csv" "txt.txt"
zip(zipfile = 'testZip', files = 'testDir/test.csv')
# adding: testDir/test.csv (deflated 68%)
压缩文件保存在当前工作目录中,除非在zipfile
参数中指定了不同的路径。我们可以通过
file.info(c('testZip.zip', 'testDir/test.csv'))['size']
# size
# testZip.zip 805
# testDir/test.csv 1493
您可以使用
压缩整个文件目录(如果没有子文件夹)files2zip <- dir('testDir', full.names = TRUE)
zip(zipfile = 'testZip', files = files2zip)
# updating: testDir/test.csv (deflated 68%)
# updating: testDir/cats.csv (deflated 27%)
# updating: testDir/txt.txt (stored 0%)
并unzip
查看文件,
unzip('testZip.zip', list = TRUE)
# Name Length Date
# 1 testDir/test.csv 1493 2014-05-14 20:54:00
# 2 testDir/cats.csv 116 2014-05-14 20:54:00
# 3 testDir/txt.txt 32 2014-05-08 09:37:00
注意:来自?zip
,关于zip
参数。
在Windows上,默认依赖于路径中的zip程序(例如来自Rtools的程序)。
答案 1 :(得分:2)
为了避免(a)相对路径的问题(即,zip文件本身包含一个文件夹结构,其中包含要压缩的完整文件夹路径)和(b)for
循环(井,样式),可以使用
my_wd<-getwd() # save your current working directory path
dest_path<-"C:/.../folder_with_files_to_be_zipped"
setwd(dest_path)
files<-list.files(dest_path)
named<-paste0(files,".zip")
mapply(zip,zipfile=named,files=files)
setwd(my_wd) # reset working directory path
与R的内置unzip
函数不同,zip
需要一个像7-zip(Windows)这样的zip程序或者一个属于Rtools的程序存在于系统路径中。 / p>
答案 2 :(得分:1)
您可以从omegahat
repos:
install.packages('Rcompression', repos = "http://www.omegahat.org/R", type = "source")
对于Windows,您需要跳过安装zlib和bzip2并正确链接的环。
在某些情况下可以使用 utils::zip
。它有很多问题。一种情况是,在命令提示符下可以使用的字符串的最大长度为8191个字符(某些版本为2047个字符)。如果要压缩目录/文件名称的大量字符的目录,这将导致问题。例如,如果您压缩firefox配置文件目录。另外我发现需要相对于我正在使用相对目录名称的目录发布zip命令。 Rcompression
有一个altNames
参数来处理这个问题。
话虽如此,我总是遇到让Rcompression
在Windows上运行的问题。
答案 3 :(得分:0)
制作
#Convertir todas las carpetas en .zip
d <- "C:/Users/Eric/Documents/R/win-library/3.3"
array <- list.files(d)
for (i in 1:length(array)){
name <- paste0(array[i],".zip")
zip(name, files = paste0(d,paste0("/",array[i])))
}
答案 4 :(得分:0)
对于仍在寻找它的人们:现在有一个"zip" package并不依赖于外部可执行文件。