2015-12-17 4 views
1

Эй, я хочу спросить, как скопировать несколько файлов из нескольких папок к одному папкам с использованием языка RКопирование нескольких файлов из нескольких папок в одну папку с помощью R

Предполагая, что есть три папки:

  1. настольные/folder_A/задача/sub_task/
  2. настольные/folder_B/задача/sub_task/
  3. настольные/folder_C/задача/sub_task/

В каждой папке sub_task имеется несколько файлов. Я хочу скопировать все файлы в папки sub_task и вставить их в новую папку (назовем эту новую папку как «all_sub_task») на рабочем столе. Может ли кто-нибудь показать мне, как это сделать в R, используя цикл или применить функцию? Заранее спасибо.

ответ

2

Это решение 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.

+0

Спасибо. Я хочу спросить, есть ли способ сделать функцию цикла для создания my_dirs, поскольку есть много папок (так что не только папки A, B и C). Это будет довольно сложная задача, чтобы напечатать каждый путь. – kelvinfrog

+0

'for (dir in my_dirs) {dir.create (dir, recursive = TRUE)}'? – ialm

+0

Но этот код не создает my_dirs. Я знаю, что могу использовать list.files для отображения имени папки на рабочем столе. Но я не знаю, как использовать цикл для вставки имен каждой папки, чтобы составить список «desktop/(имя папки)/task/subtask /». – kelvinfrog

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 = '/')) 
} 
+0

Есть ли способ скопировать файлы с повторяющимися именами файлов в один каталог и сохранить оба файла путем автоматического дублирования дубликатов (ов)? – Liza

Смежные вопросы