Karan Pappala
Karan Pappala

Reputation: 651

Copy folders from one directory to another in R

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?

Upvotes: 37

Views: 43911

Answers (4)

josep maria porrà
josep maria porrà

Reputation: 1388

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)

Upvotes: 4

Neha Prasad
Neha Prasad

Reputation: 41

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.

Upvotes: 4

WaterRocket8236
WaterRocket8236

Reputation: 1524

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)

Upvotes: 25

Huang Chen
Huang Chen

Reputation: 1203

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)

Upvotes: 33

Related Questions