我有一个文件夹,我必须每天删除大约4,000个.rds
个文件。这些文件不超过几千字节(最大大小:73 kb),但每次我尝试通过R
删除它们时都需要一段时间(如果我手动删除它们也一样)。我想知道是否有其他方法可以更快地删除它们?
我该怎么做才能删除文件:
# ***********************************************************************
# METHOD # 1 :
# reads all the .rds files from folder
files2 <- list.files(paste("/Volumes/share/ZZZ/GOOGLE1/"))
# I use lapply along with file.remove()
TR <- lapply(as.list(files2),function(x) file.remove(paste0("/Volumes/share/ZZZ/GOOGLE1/",x,"")))
# ***********************************************************************
# METHOD #2 :
do.call(unlink,list(list.files("/Volumes/share/ZZZ/GOOGLE1/",full.names=TRUE)))
# ***********************************************************************
# METHOD # 3 :
unlink("/Volumes/share/ZZZ/GOOGLE1/", recursive=TRUE, force=TRUE)
我通过删除每个方法的100个文件来测试所有3种方法
结果:
METHOD #1 :
user system elapsed
0.014 0.064 44.133
METHOD #2 :
user system elapsed
0.010 0.047 36.447
METHOD #3 :
user system elapsed
0.009 0.057 43.400
sessionInfo()
R version 3.3.0 (2016-05-03)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.5 (El Capitan)
答案 0 :(得分:3)
unlink()
接受通配符,因此您可以执行以下操作,这在我的系统上看起来非常快:
system.time({ unlink('*.rds'); }); ## deleted 4000 ~65KB files
## user system elapsed
## 0.140 0.922 1.151
请注意,@ Thomas关于将system()
与wait=F
一起使用的建议是一个好主意,但有一些缺点:(1)它依赖于平台,(2)您将无法检查remove命令的返回码,因为它是异步运行的,(3)它可能引入竞争条件;例如,如果后续代码快速写入新的*.rds
文件,则最终可能会被异步删除命令删除。
答案 1 :(得分:-4)
你想要删除r中的文件吗?我正在使用这个
RM(文件)