C_Mu
C_Mu

Reputation: 325

R move whole folder to another directory

I would like to move the whole folder from one directory to another, this is my code,

folder_old_path = "C:/Users/abc/Downloads/managerA"
path_new = "C:/User/abc/Desktop/managerA"
current_files = list.files(folder_old_path, full.names = TRUE)
file.copy(from = current_files, to = path_new, 
          overwrite = recursive, recursive = FALSE, copy.mode = TRUE)

However, I am getting this error msg

Error in file.copy(from = current_files, to = path_new, overwrite = recursive, : more 'from' files than 'to' files

any idea how to fix this? thank you so much for your help!

Upvotes: 9

Views: 10148

Answers (4)

dllahr
dllahr

Reputation: 451

Easiest:

file.rename(folder_old_path, path_new)

If you want to check if path_new already exists you can expand the above to:

if (dir.exists(path_new) {
  print(paste("already exists so recurively deleting path_new", path_new))
  unlink(path_new, recursive = TRUE)
}

Upvotes: 2

amc
amc

Reputation: 833

On linux you should be able to simply:

1) make the OTHER_DIR if needed. If it is a subdirectory to OUTPUT_DIR then: dir.create(file.path(OUTPUT_DIR, OTHER_DIR), showWarnings = FALSE) setwd(file.path(OUTPUT_DIR, OTHER_DIR))

dir.create() will just print a warning if the directory exists. If you want to see the warning, just remove the showWarnings = FALSE.

If it is just another directory at the same level as OUTPUT_DIR then:

dir.create(OTHER_DIR)

2) Then move the file (e.g. if OTHER_DIR is at the same level as OUTPUT_DIR):

file.rename("C:/OUTPUT_DIR/file.csv", "C:/OTHER_DIR/file.csv")

Upvotes: 0

alebj88
alebj88

Reputation: 69

library(ff)
from <- "~/Path1/"            #Current path of your folder
to   <- "~/Path2/"            #Path you want to move it.
path1 <- paste0(from,"NameOfMyFolder")
path2 <- paste0(to,"NameOfMyFolder")
file.move(path1,path2)

Try using this little code.

Upvotes: 5

Ch4ni
Ch4ni

Reputation: 312

It appears as though the current_files = list.files(folder_old_path, full.names = TRUE) step is unnecessary. If my understanding of the R file documentation is correct, then you should be able to just use the following:

folder_old_path = "C:/Users/abc/Downloads/managerA"
path_new = "C:/User/abc/Desktop/managerA"
file.copy(from = folder_old_path, to = path_new, 
          overwrite = recursive, recursive = FALSE, copy.mode = TRUE)

If that doesn't work, then you'll have to create a new list of files (iterate over the current_files and replace folder_old_path with folder_new_path for each item in the list) and call file.copy on those:

folder_old_path = "C:/Users/abc/Downloads/managerA"
path_new = "C:/User/abc/Desktop/managerA"
current_files = list.files(folder_old_path, full.names = TRUE)
new_files = # replace folder_old_path with path_new for every file in current_files
file.copy(from = current_files, to = new_files, 
          overwrite = recursive, recursive = FALSE, copy.mode = TRUE)

... this all assumes (of course) that both folder_old_path and path_new exist and you have the correct permissions on them.

The linked page does contain a caveat/note about windows paths:

There is no guarantee that these functions will handle Windows relative paths of the form d:path: try d:./path instead. In particular, d: is not recognized as a directory. Nor are \\?\ prefixes (and similar) supported.

Upvotes: 1

Related Questions