首页 > 解决方案 > 使用 R 根据元数据一次性重命名文件夹/目录

问题描述

我有一个关于根据元数据帧中的信息重命名文件夹的问题。在下面,您将找到我的目录结构和元数据的 .information 示例。这意味着名称为 S1 的文件夹将命名为 V_3_4 等。文件夹 S1、S2、S3 等可以在 D0 和 D1 文件夹中找到。

元数据框:

日期 样品名称 S_number
2021_05_20 V_3_4 S1
2021_05_20 V_9_4 S2
2021_05_20 H_13_5 S3

目录结构:

main Directory
        |
        |___ 2021_metadata.txt
        |___ Experiment
                ├── D0
                   ├── Weather
                           |__ S1
                           |__ S2
                           
                │  └── Temperature
                           |__ S1
                           |__ S2
                └── D1
                   ├── Weather
                           |__ S1
                           |__ S2
                           |__ S3
                   └── Temperature

我试图用这段代码做到这一点:

name_file <- "./20210325_metadata_r_test_1.txt"

Metadataframe <- read.delim(name_file)


dirs <- list.dirs(path = path, recursive = TRUE, full.names = TRUE)

if(any(dirs %in% Metadataframe$S_number)){
    for(dir in dirs[which(dirs %in% Metadataframe$S_number)]){
        shell(paste("move", dir, Metadataframe$Sample_name[which(Metadataframe$S_number == dir)]))
    }
}

当我想通过在 list.dirs 中放入特定文件夹的路径(例如 ~/main directory/experiment/D0/Weather)来单独执行此代码时,此代码将起作用。但是,我想一次性重命名所有文件夹(在 D0/温度、D1/天气和 D1/温度中也是如此)。我尝试从主目录执行 list.dirs() 以获取所有目录,但是代码没有做任何事情。它不会重命名文件夹。我做错了什么,有没有办法解决这个问题?

预先感谢您的帮助

标签: rdirectorymetadatarename

解决方案


我猜你只需要另一个 for 循环。看看这是否有帮助

paths <- paste0("~/main directory/experiment/", c("D0/temperature", "D1/Weather", "D1/temperature"))

invisible(lapply(paths, function(path){
  dirs <- list.dirs(path = path, recursive = TRUE, full.names = TRUE)
  
  if(any(dirs %in% Metadataframe$S_number)){
    for(dir in dirs[which(dirs %in% Metadataframe$S_number)]){
      shell(paste("move", dir, Metadataframe$Sample_name[which(Metadataframe$S_number == dir)]))
    }
  }
  return(NULL)
}))

推荐阅读