Копирование и вставка файлов в папки с совпадающими именами с помощью R

#r #directory #batch-processing #copy-paste

#r #каталог #пакетная обработка #копирование-вставка

Вопрос:

Я пытаюсь скопировать файлы в различные папки с совпадающими именами файлов.

Вот выдержка имен файлов:

 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 , и так далее, и тому подобное?

Ответ №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()

Комментарии:

1. Потрясающе, это сработало как шарм. Не могли бы вы объяснить логику file.rename? Мне это никогда не приходило в голову! Еще раз спасибо.

2. Это всего лишь два параметра: старое имя, новое имя. Пока вы объединяете пути, вы можете переместить файл в любую существующую папку, которая вам нравится. Переименование файла — это, по сути, то же самое, что и его перемещение.