【问题标题】:Copy multiple files from multiple folders to a single folder using R使用 R 将多个文件从多个文件夹复制到单个文件夹
【发布时间】:2015-12-17 22:00:25
【问题描述】:

你好我想问如何使用R语言将多个文件夹中的多个文件复制到单个文件夹中

假设有三个文件夹:

  1. 桌面/文件夹_A/task/sub_task/
  2. 桌面/文件夹_B/task/sub_task/
  3. 桌面/文件夹_C/task/sub_task/

在每个 sub_task 文件夹中,有多个文件。我想复制 sub_task 文件夹中的所有文件并将它们粘贴到桌面上的新文件夹中(让我们将此新文件夹命名为“all_sub_task”)。谁能告诉我如何在 R 中使用循环或应用函数来做到这一点?提前致谢。

【问题讨论】:

    标签: r file-manipulation


    【解决方案1】:

    这是一个 R 解决方案。

    # Manually enter the directories for the sub tasks
    my_dirs <- c("desktop/folder_A/task/sub_task/", 
                 "desktop/folder_B/task/sub_task/",
                 "desktop/folder_C/task/sub_task/")
    
    # Alternatively, if you want to programmatically find each of the sub_task dirs
    my_dirs <- list.files("desktop", pattern = "sub_task", recursive = TRUE, include.dirs = TRUE)
    
    # Grab all files from the directories using list.files in sapply
    files <- sapply(my_dirs, list.files, full.names = TRUE)
    
    # Your output directory to copy files to
    new_dir <- "all_sub_task"
    # Make sure the directory exists
    dir.create(new_dir, recursive = TRUE)
    
    # Copy the files
    for(file in files) {
      # See ?file.copy for more options
      file.copy(file, new_dir)
    }
    

    编辑为以编程方式列出sub_task 目录。

    【讨论】:

    • 谢谢。我想问是否有办法执行循环函数来创建 my_dirs,因为有很多文件夹(所以不仅仅是文件夹 A、B 和 C)。输入每条路径将是一项艰巨的任务。
    • for(dir in my_dirs) { dir.create(dir, recursive = TRUE) }?
    • 但是这段代码不会创建 my_dirs。我知道我可以使用 list.files 列出桌面中文件夹的名称。但我不知道如何使用循环粘贴每个文件夹名称以制作“桌面/(文件夹名称)/任务/子任务/”列表。
    • 对于您评论中的示例,my_dirs &lt;- list.dirs("desktop", pattern = "subtask", recursive = TRUE) 应该可以工作。查看我的编辑。
    • 糟糕——你可以试试list.files("desktop", pattern = "subtask", recursive = TRUE, include.dirs = TRUE)而不是list.dirs——它仍然应该列出目录。
    【解决方案2】:

    这段代码应该可以工作。该函数采用一个目录 - 例如desktop/folder_A/task/sub_task/- 并将那里的所有内容复制到第二个目录。当然你可以使用循环或者申请一次使用多个目录,因为第二个值是固定的sapply(froms, copyEverything, to)

    copyEverything <- function(from, to){
      # We search all the files and directories
      files <- list.files(from, r = T)
      dirs  <- list.dirs(from, r = T, f = F)    
    
    
      # We create the required directories
      dir.create(to)
      sapply(paste(to, dirs, sep = '/'), dir.create)
    
      # And then we copy the files
      file.copy(paste(from, files, sep = '/'), paste(to, files, sep = '/'))
    }
    

    【讨论】:

    • 有没有办法将具有重复文件名的文件复制到一个目录中,并通过自动重命名重复文件来保留这两个文件?
    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2022-07-17
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多