67

I want to copy/paste a file from one folder to another folder in windows using R, but it's not working. My code:

> file.rename(from="C:/Users/msc2/Desktop/rabata.txt",to="C:/Users/msc2/Desktop/Halwa/BADMASHI/SCOP/rabata.tx")

[1] FALSE
Paul Hiemstra
  • 59,984
  • 12
  • 142
  • 149
Sagar Nikam
  • 1,708
  • 3
  • 22
  • 35

5 Answers5

76

If you wanted a file.rename()-like function that would also create any directories needed to carry out the rename, you could try something like this:

my.file.rename <- function(from, to) {
    todir <- dirname(to)
    if (!isTRUE(file.info(todir)$isdir)) dir.create(todir, recursive=TRUE)
    file.rename(from = from,  to = to)
}

my.file.rename(from = "C:/Users/msc2/Desktop/rabata.txt",
               to = "C:/Users/msc2/Desktop/Halwa/BADMASHI/SCOP/rabata.txt")
Josh O'Brien
  • 159,210
  • 26
  • 366
  • 455
  • I am trying to move a file from `/tmp` to `~`, but I am getting a `'Invalid cross-device link'`, how could I solve this? – Alejandro Alcalde Oct 26 '18 at 18:13
  • 1
    `file.rename` cannot move files between different mount points. I guess that in your case /tmp and /home are on separate partitions and mount points. In such a case you can either do a copy and then remove the old file, or you can use `file_move` from the `fs` package, which seems to be able to move files across mount points. – amitr Mar 05 '20 at 12:32
41

Please just be aware that file.rename will actually delete the file from the "from" folder. If you want to just make a duplicate copy and leave the original in its place, use file.copy instead.

Gordon
  • 19,811
  • 4
  • 36
  • 74
dxj
  • 513
  • 4
  • 6
17

Use file.copy() or fs::file_copy()

file.copy(from = "path_to_original_file",
          to   = "path_to_move_to")

Then you can remove the original file with file.remove():

file.remove("path_to_original_file")

Update 2021-10-08: you can also use fs::file_copy(). I like {fs} for consistent file and directory management from within R.

Gregor Thomas
  • 136,190
  • 20
  • 167
  • 294
Rich Pauloo
  • 7,734
  • 4
  • 37
  • 69
5

You can try the filesstrings library. This option will move the file into a directory. Example code:

First, we create a sample directory and file:

dir.create("My_directory")
file.create("My_file.txt")

Second, we can move My_file.txt into the created directory My_directory:

file.move("My_file.txt", "My_directory")
RRuiz
  • 2,159
  • 21
  • 32
0

You are missing a "t" letter in the second extension. Try this:

file.rename(from="C:/Users/msc2/Desktop/rabata.txt",to="C:/Users/msc2/Desktop/Halwa/BADMASHI/SCOP/rabata.txt").

Additionally, it could be worth it to try the file.copy() function. It is specifically designed to copy files instead of renaming.