根据文件名创建文件夹

问题描述

我有一个问题,如何根据文件名的一部分创建一个新文件夹,并将相应的文件直接移动到新文件夹中。下面您将通过一些示例找到我的目录结构。在 D0 和 D1 文件夹中,您都会找到包含 .TIF 文件的 Weather 和 Day 文件夹。我想要的是在明场和 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/Temperature 中也有文件,我还想在其中创建 S1、S2 等文件夹。此外,有些文件夹只有三组,所以 S1-S3,而其他组有 S1-S6。 预先感谢您的建议

解决方法

回收 some code

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,dir.match,filebase))
    }
  }  else {F}
}

lapply(files,move.file)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...