【问题标题】:Copy folders from one directory to another in R在R中将文件夹从一个目录复制到另一个目录
【发布时间】:2015-10-17 18:08:15
【问题描述】:

我有两个文件夹(比如“A”、“B”),它们位于一个文件夹中(比如“输入”)。我想将“A”和“B”复制到另一个文件夹(比如“输出”)。我可以在 R 中执行此操作吗?

【问题讨论】:

  • 看看?file.copy
  • 那是针对个别文件的权利。我想一次复制两个文件夹。
  • From in file.copy 获取文件向量,因此您可以一次复制两个文件夹。
  • 我可以复制文件夹中的文件,但不能复制文件夹

标签: r file directory copying


【解决方案1】:

将当前目录文件复制到新目录

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

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

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

这是为了删除你的旧文件

file.remove(currentfiles)

【讨论】:

  • 我可以复制文件夹中的文件,但不能复制文件夹。我删除了代码的递归部分。
  • 根据 ?file.copy 文档,参数 overwrite 是合乎逻辑的。更改为 TRUEFALSE
  • 由于 OP 没有反应我编辑了帖子,我已将覆盖设置为 TRUE,这意味着此操作可能具有破坏性,请谨慎使用或设置为 FALSE
【解决方案2】:

我迟到了。这是我完成任务的简单方法。 在 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 创建中的当前文件夹名称错误
  • 对不起。我的错。现在修正了错字。
【解决方案3】:

我看到的所有关于这个问题的解决方案似乎都暗示了基于 Unix 的操作系统(Mac 和 Linux)。我认为响应对 OP 不起作用的原因是 OP 可能在 Windows 上。

在 Windows 中,文件的定义就是文件,而 Unix 将文件定义为文件或目录。我相信这可能是 file.copy() 不起作用的原因,基于我对“文件操作”R 文档的理解 - 输入到 file.copy() 的“来自”字段的参数必须是文件(而不是目录),但也可以是“to”字段的文件或目录。

【讨论】:

    【解决方案4】:

    fs 包提供了一种替代解决方案,可以准确回答原始问题

    library(fs)
    

    我已经使用工作目录中建议的结构创建了“输入”文件夹

    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
    

    请注意,我们在一般情况下工作,即“输入”文件夹包含文件夹“A”和“B”之外的其他文件夹和文件。

    如果“input”文件夹只包含文件夹“A”和“B”,一行代码就足够了:

    fs::dir_copy("input", "output")
    

    reprex package (v2.0.0) 于 2021-07-03 创建

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 2013-05-21
      • 2017-11-18
      • 2013-06-01
      • 2020-06-22
      • 2014-08-12
      • 2013-10-24
      • 2011-10-24
      相关资源
      最近更新 更多