在R中将文件夹从一个目录复制到另一个目录

32

我有两个文件夹(称为“A”和“B”),它们在一个文件夹中(称为“输入”)。我想将“A”和“B”复制到另一个文件夹中(称为“输出”)。我能用R来做到这一点吗?


1
请查看?file.copy - Mamoun Benghezal
那是针对单个文件的,对吧。我想一次复制两个文件夹。 - Karan Pappala
1
在file.copy中,需要传入一个文件向量,这样你就可以一次性复制两个文件夹。 - Wannes Rosiers
2
我能够复制文件夹中的文件,但无法复制整个文件夹。 - Karan Pappala
4个回答

31

将当前目录的文件复制到它们的新目录中

currentfiles是要复制的文件列表,newlocation是要复制到的目录。

如果您没有列出当前的文件,则需要循环遍历您的工作目录。

file.copy(from=currentfiles, to=newlocation, 
          overwrite = TRUE, recursive = FALSE, 
          copy.mode = TRUE)

这是用于删除您的旧文件

file.remove(currentfiles)

4
我能够复制文件夹中的文件,但无法复制整个文件夹。我已经将代码中的递归部分移除了。 - Karan Pappala
1
根据?file.copy文档,参数overwrite是逻辑型的。请将其更改为TRUEFALSE - pat-s
由于OP没有回应,我编辑了帖子,将覆盖设置为“TRUE”,这意味着此操作可能具有破坏性,请谨慎使用或将其设置为“FALSE”。 - moodymudskipper

21
我迟到了。这是我简单的方法,可以完成任务。 在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)

在创建list_of_files时,您当前文件夹的名称错误。 - vladli
抱歉,我的错。现在已经修复了拼写错误。 - WaterRocket8236
这个答案更清晰,因此对新手更有用。 - Nemo

4
我看到这个问题的所有解决方案似乎都暗示着一个基于Unix的操作系统(Mac和Linux)。我认为回答没有对OP起作用的原因是OP可能在Windows上。
在Windows中,文件的定义只是一个文件,而Unix将文件定义为文件或目录。 我相信这可能是为什么 file.copy() 不起作用的原因,基于我对“文件操作”R文档的理解 - 输入到file.copy() 的参数必须是文件(而不是目录)的“from”字段,但可以是“to”字段的文件或目录。

2

fs包提供了一个替代方案,可以精确地回答原始问题。

library(fs)

我已经在我的工作目录中创建了一个名为“input”的文件夹,并按照建议的结构进行了组织。
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

请注意,我们考虑了“input”文件夹中除了“A”和“B”文件夹以外的其他文件和文件夹。
如果“input”文件夹只包含“A”和“B”文件夹,则只需要一行代码:
fs::dir_copy("input", "output")

2021年07月03日由reprex包(v2.0.0)创建


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接