如何将特定文件从子文件夹复制到R中的另一个文件夹?

时间:2019-01-05 12:19:49

标签: r

新年快乐!

嗨,

我想将子文件夹中具有特定名称的文件复制到另一个文件夹(具有与主文件夹相同的名称)。 为了阐明我的问题,我举一个例子。父文件夹(“ Histomach”)包含60个子文件夹(即first_subfolder:“ TCGA_02”,“ TCGA_06”,…),每个文件夹包含4个子文件夹(即second_subfolder:“ f”,“ T1”,“ T2”,“ t1c”)每个文件中都有多个文件。

我想从这些文件中选择带有“ _skullstrip_out.nii”模式的特定文件,然后将其复制到另一个文件夹(即“ base-line”),并使用相同的第一子文件夹名称(即“ TCGA-02”) ,“ TCGA_06”,...)。

我尝试了这段代码。

parent_folder<-"D:/PHD/HISTOMATCH"
setwd(parent_folder)
mainfolder<-list.files(parent_folder)
first_subfolder<-list.dirs(parent_folder,recursive = FALSE)
newdir<-"D:/PHD/base_line"
dir.create(newdir)
for(i in 1:length(mainfolder)){
  
  folder<-dir.create(paste(newdir,mainfolder[i]))}

  for(i in 1:length(mainfolder)){
    second_subfolder<-list.dirs(first_subfolder[i],
                                 recursive = FALSE)
    for(f in 1:length(second_subfolder)){
      filesname<-list.files(second_subfolder[f])
      selectefile<-grepl('-skullStrip_Output.nii.gz$',filesname)
      file.copy(from =second_subfolder[f] ,to=paste(newdir,mainfolder[i]))
      
    }
}
复制失败,尽管未发生任何错误。

我该如何解决这个问题?

如果您能给我解决此问题的方法,我将不胜感激。

先谢谢您。

1 个答案:

答案 0 :(得分:2)

据我了解您的问题,我认为以下内容将带您进一步。至少,不需要所有的for循环。相反,您应该将现有的文件操作函数与递归参数一起使用。

您未提供任何要使用的数据。我玩过R目录中的文件。我试图对“ doc”文件夹中的所有.pdf文件进行基本相同的操作,然后将它们复制到与“ doc”相同级别(即工作目录)的“ mytest”文件夹中。

# To make a reproducible example  
setwd(R.home()) # Your working dir should be the folder "PHD" that contains "Histomach". 

# Define from and to dirs, and the file pattern
from_dir <- "doc"     # should be "Histomach" in your case
to_dir   <- "mytest"  # "base-line"
pattern  <- ".pdf"    # "_skullstrip_out.nii",


# Get all relevant files
the_files <- list.files(path = from_dir, 
                        recursive = TRUE,
                        pattern = pattern)

# Create the "to_dir" as well as all corresponding subdirs (where files to copy were found)
sapply(file.path(to_dir, dirname(the_files)), 
       dir.create, recursive = TRUE, showWarnings = FALSE)

# Copy the files
file.copy(from = file.path(from_dir, the_files), 
          to   = file.path(to_dir,   the_files))

那是你想要的吗?

要清理我在R文件夹中造成的混乱,请运行

file.remove(file.path(to_dir, the_files))