list.files的性能问题

时间:2016-09-28 09:22:32

标签: r shell find

我正在尝试使用list.files从3个网络驱动器中检索文件,这需要永远。当我在shell中使用find时,它会在不到15秒的时间内返回所有结果。

system.time(
  jnk <- list.files(c("/Volumes/massspec", "/Volumes/massspec2", "/Volumes/massspec3"), 
                    pattern='_MA_.*_HeLa_', 
                    recursive=TRUE))
#   user  system elapsed 
#  1.567   6.381 309.500 

这是等效的shell命令。

time find /Volumes/masssp* -name *_MA_*_HeLa_*
# real  0m13.776s
# user  0m0.361s
# sys   0m0.620s

我需要一个适用于Windows和Unix系统的解决方案。有谁有个好主意?网络驱动器总共有大约120,000个文件,但大约16TB。所以文件不多,但文件非常庞大。

1 个答案:

答案 0 :(得分:0)

根据评论,我写了一个小R函数,它应该适用于Windows和Unix ......

quickFileSearch <- function(path, pattern) {
  switch (.Platform$OS.type,
          unix={
            paths <- paste(path, collapse=' ')
            command <- paste('find', paths, '-name', pattern)
            system(command, intern=TRUE)
          },
          windows={
            paths <- paste(file.path(path, pattern, 
                                     fsep='\\'),
                           collapse=' ')
            command <- paste('dir', paths, '/b /s /a-d')
            shell(command, intern=TRUE)}
  )
}

整个事情还没有经过多少考验,但它的目的是为了我的目的。