Please help - using R, how would I search for a specific file/folder on all drives (hard drives as well as attached USB drives)?
For example, I'm looking for a directory named "MyFiles", and it could be anywhere on my C:, or on my USB (E:). I'd like to know all the tree locations of the directory.
Thanks for any advice!
If we want to check the current directory of the R script, we can use getwd( ) function. For getwd( ), no need to pass any parameters. If we run this function we will get the current working directory or current path of the R script. To change the current working directory we need to use a function called setwd( ).
R‑Studio searches for all files that matches the specified search criteria.. The search results appear in the Find Results panel. Mark/Unmark All . R‑Studio marks/unmarks all files that match the search criteria.
One likely cause of files not appearing from an External HDD is that your drivers aren't up to date. This can happen if you plug the drive into a computer that it has never been plugged into before, or if you have run updates on your machine since the last time the drive was plugged in.
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:
recurse = #num_levels_to_recurse)
to the above code.MyFiles
, we can add the argument invert = 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With