I have two folders (say "A","B") which are in a folder (say "Input"). I want to copy "A" and "B" to another folder (say "Output"). Can I do this in R?
-
1take a look at `?file.copy` – Mamoun Benghezal Jul 27 '15 at 13:57
-
That is for individual files right. I want to copy two folders at once. – Karan Pappala Jul 27 '15 at 13:58
-
1From in file.copy takes a vector of files, so you can copy two folders at once. – Wannes Rosiers Jul 27 '15 at 14:01
-
2I am able to copy the files in the folder but not the folder – Karan Pappala Jul 27 '15 at 14:27
4 Answers
Copying your current directory files to their new directories
currentfiles
is a list of files you want to copy
newlocation
is the directory you're copying to
If you aren't listing your current files, you'll need to loop through you're working directory
file.copy(from=currentfiles, to=newlocation,
overwrite = TRUE, recursive = FALSE,
copy.mode = TRUE)
This is for deleting your old files
file.remove(currentfiles)

- 46,417
- 11
- 121
- 167

- 1,177
- 9
- 24
-
4I am able to copy the files in the folder but not the folder. I removed the recursive part of the code. – Karan Pappala Jul 27 '15 at 14:27
-
1Argument `overwrite` is logical according to ?file.copy documentation. Change to either `TRUE` or `FALSE`. – pat-s Apr 19 '16 at 09:30
-
as OP didn't react I edited the post, I've set overwrite to `TRUE`, meaning this action may be destructive, use wih caution or set to `FALSE` – moodymudskipper Nov 09 '17 at 13:55
I am late. This is my simple approach that gets things done. In R,
current_folder <- "C:/Users/Bhabani2077/Desktop/Current"
new_folder <- "C:/Users/Bhabani2077/Desktop/Ins"
list_of_files <- list.files(current_folder, ".py$")
# ".py$" is the type of file you want to copy. Remove if copying all types of files.
file.copy(file.path(current_folder,list_of_files), new_folder)

- 1,442
- 1
- 17
- 27
All of the solutions I've seen to this question seem to imply a Unix based operating system (Mac & Linux). I think the reason that the response(s) didn't work for OP is that OP may be on Windows.
In Windows, the definition of a file is just that, a file, whereas Unix defines a file as a file or directory. I believe this may be why file.copy()
is not working, based on my understanding of the "File Manipulation" R documentation - arguments inputted to file.copy()
for the "from" field must be files (not directories), but can be either files or directories for the "to" field.

- 7,733
- 10
- 39
- 73

- 41
- 2
fs package provides an alternative solution that answers the original question precisely
library(fs)
I've created "input" folder with the structure proposed in my working directory
fs::dir_tree()
#> .
#> +-- copy_folder.R
#> +-- copy_folder.Rproj
#> \-- input
#> +-- A
#> | +-- C
#> | \-- exampleA.txt
#> +-- B
#> | \-- exampleB.txt
#> \-- D
fs::dir_copy("input/A", "output/A")
fs::dir_copy("input/B", "output/B")
fs::dir_tree()
#> .
#> +-- copy_folder.R
#> +-- copy_folder.Rproj
#> +-- input
#> | +-- A
#> | | +-- C
#> | | \-- exampleA.txt
#> | +-- B
#> | | \-- exampleB.txt
#> | \-- D
#> \-- output
#> +-- A
#> | +-- C
#> | \-- exampleA.txt
#> \-- B
#> \-- exampleB.txt
Note that we worked in the general case that "input" folder contains other folders and files than folder “A” and “B”.
If "input" folder only contains folders “A” and “B”, one line of code would be enough:
fs::dir_copy("input", "output")
Created on 2021-07-03 by the reprex package (v2.0.0)

- 1,198
- 10
- 18