Using R - How do I search for a file/folder on all drives (hard drives as well as USB drives)
Messed up a bit in the comment as I misread the thread (you need dirs). You can still do this with list.files()
tho. I mocked up a directory structure looking for directories named "data
" but also included a file named "data
":
(pre <- list.files("/var/tmp/a", "data", recursive=TRUE, full.names=TRUE, include.dirs=TRUE))
## [1] "/var/tmp/a/data" "/var/tmp/a/l/data" "/var/tmp/a/q/data"
(/var/tmp/a/l/data
is actually just a file)
But, you only need/want directories, so if you have a fairly modern R install and the purrr
package installed then you can do:
purrr::keep(pre, dir.exists)
## [1] "/var/tmp/a/data" "/var/tmp/a/q/data"
I see it's an old question, but now we can use the fs
package that according to the tidyverse blog and the package vignette "provides a cross-platform, uniform interface to file system operations" and "smooth over some of the idiosyncrasies of file handling with base R functions".
Here's how we can accomplish this task with fs
:
fs::dir_ls(path = c("C:/", "E:/"), type = "directory", glob = "*MyFiles", recurse = TRUE)
There are a couple of added advantages to using this approach:
- If we have a general sense of where this directory should be in the folder hierarchy, we can recurse upto a certain level instead of searching the entire tree. We just need to add the argument
recurse = #num_levels_to_recurse)
to the above code. - Also, if we want to list all directories except
MyFiles
, we can add the argumentinvert = TRUE
to the above code.
These two options are not available in list.files()
and list.dirs()
functions of base R. Check out this document for a thorough comparison between fs
functions and base R functions for file system operations.