新年快乐!
嗨,
我想将子文件夹中具有特定名称的文件复制到另一个文件夹(具有与主文件夹相同的名称)。 为了阐明我的问题,我举一个例子。父文件夹(“ 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]))
}
}
我该如何解决这个问题?
如果您能给我解决此问题的方法,我将不胜感激。
先谢谢您。
答案 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))