31

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?

Huang Chen
  • 1,177
  • 9
  • 24
Karan Pappala
  • 581
  • 2
  • 6
  • 18

4 Answers4

31

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)
moodymudskipper
  • 46,417
  • 11
  • 121
  • 167
Huang Chen
  • 1,177
  • 9
  • 24
  • 4
    I 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
  • 1
    Argument `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
20

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)
WaterRocket8236
  • 1,442
  • 1
  • 17
  • 27
4

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.

Felipe Augusto
  • 7,733
  • 10
  • 39
  • 73
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)

josep maria porrà
  • 1,198
  • 10
  • 18