【问题标题】:Copy-paste files to folders that have matching names using R使用 R 将文件复制粘贴到名称匹配的文件夹中
【发布时间】:2021-02-11 09:55:30
【问题描述】:

我正在尝试将文件复制到具有匹配文件名的各种文件夹中。

这是文件名的摘录:

20201026_ABCD.txt
20201026_XYZ.txt
20201027_ABCD.txt
20201027_POR.txt
20201028_ABCD.txt
20201028_PQR.txt

我想创建仅包含上述文件中的日期组件的文件夹。根据下面的代码,我已经设法做到了这一点:

setwd("C:/Projects/TEST")
        
library(stringr)
        
filenames<-list.files(path = "C:/Projects/TEST", pattern = NULL)
        
#create a variable that contains all the desired filenames
foldernames.unique<-unique(str_extract(filenames,"[0-9]{1,8}"))
    
#create folders based on this variable
foldernames.unique<-paste("dates/",foldernames.unique,sep='')
lapply(foldernames.unique,dir.create,recursive = TRUE)

现在,如何将20201026_ABCD.txt and 20201026_XYZ.txt 复制到文件夹20201026 等等?

【问题讨论】:

    标签: r directory batch-processing copy-paste


    【解决方案1】:

    现在您只需要使用file.rename 来移动文件。首先,我将进行一些更改以捕获非唯一文件夹名称,这样我就不必重新整理它们。这个怎么样

    srcfolder <- "C:/Projects/TEST"
    filenames <- list.files(path = srcfolder, pattern = NULL)
            
    #create a variable that contains the desired foldername for each file
    foldernames <- file.path("dates", str_extract(filenames,"[0-9]{1,8}"))
    foldernames.unique <- unique(foldernames)
        
    #create folders based on unique values of variable
    lapply(foldernames.unique, dir.create, recursive = TRUE)
    
    # Now move files
    file.rename(file.path(srcfolder, filenames), file.path(foldernames, filenames))
    

    我们只是用file.path 构建文件名,这比paste() 更健壮一些

    【讨论】:

    • 太棒了,这就像一个魅力。你能解释一下file.rename背后的逻辑吗?我从来没想过!再次感谢。
    • 就是两个参数,老名字,新名字。只要将路径放在一起,您就可以将文件移动到您喜欢的任何现有文件夹。重命名文件与移动文件基本相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2021-11-10
    • 2019-11-27
    • 2015-01-16
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多