我有一个问题,如何根据部分文件名创建一个新文件夹,并将相应的文件直接移动到新文件夹中。下面你会发现我的目录结构和一些例子。在D0和D1文件夹中,您可以找到包含.TIF文件的Weather和Day文件夹。我希望在brightfield和FITC文件夹中创建部分基于文件名的文件夹。例如,如果文件包含s2,则创建文件夹s2,其中文件的名称中包含s2。
目前的情况
main Directory
|
|___ Experiment
├── D0
├── Weather
|__ D0_PM_flow__Weather 100 - CAM_s3_t5.TIF
|__ D0_PM_flow__Weather 100 - CAM_s3_t5.TIF
│ └── Temperature
└── D1
├── Weather
└── Temperature
我想要什么:
main Directory
|
|___ Experiment
├── D0
├── Weather
|__ S1
| D0_PM_flow__Weather 100.txt
|__ S2
|D0_PM_flow__Weather 100.txt
│ └── Temperature
└── D1
├── Weather
└── Temperature
我可以用下面的代码手动完成,但这需要很多时间。有没有更方便的方法可以更自动地做到这一点?为了方便起见,我只在D0/Weather文件夹中显示了3个文件,但在D0/Temperature文件夹、D1/Weather和D1/Temperation中也有一些文件,我也想创建S1、S2等文件夹。此外,有些文件夹只有三个组,所以S1-S3,而其他组有S1-S6。
回收一些代码:
library(stringr)
#Get all files
path <- 'C:/temp/test'
files <- list.files(path= path, recursive = TRUE)
move.file <- function(filename) {
(fromdir <- dirname(filename))
(filebase <- basename(filename))
dir.match <- toupper(str_extract(filename,'_[Ss][0-9]+_'))
if (isTRUE(nchar(dir.match)>0)) {
dir.match <- substr(dir.match,2,nchar(dir.match)-1)
# File not in right directory
if (basename(fromdir)!=dir.match) {
dir.create(file.path(path,fromdir,dir.match),showWarnings = F)
file.rename(from = file.path(path,filename),
to = file.path(path,fromdir,dir.match,filebase))
}
} else {F}
}
lapply(files, move.file)