>我有一个关于根据元数据帧中的信息重命名文件夹的问题。在下面,您将找到我的目录结构和元数据的.information示例。
元数据帧:
<>Sample_name th style="text-align: right;"> | >S_number|
---|---|
2021_05_20<</td>td style="文本对齐:居中;">V_3_4 | S1 |
2021_05_20<</td>td style="文本对齐:居中;">V_9_4 | >S2 |
2021_05_20<</td>td style="文本对齐:居中;">H_13_5 | >S3 |
您可以使用list.dirs('/path', recursive = F, full.names = F)
查找当前目录名称(例如 S1、S2 等)。然后,您可以使用system(paste('mv', old_dir, new_dir))
更改名称
例:
main_dir
└── experiment
└── D0
├── temperature
│ ├── S1
│ └── S2
└── weather
├── S1
└── S2
Metadataframe <- data.frame(Sample_name = c("V_3_4", "V_9_4", "H_13_5"), S_number = c("S1", "S2", "S3"))
setwd("~/main_dir/experiment/D0/temperature/")
dirs <- list.dirs('./', recursive = F, full.names = F)
if(any(dirs %in% Metadataframe$S_number)){
for(dir in dirs[which(dirs %in% Metadataframe$S_number)]){
system(paste("mv", dir, Metadataframe$Sample_name[which(Metadataframe$S_number == dir)]))
}
}
main_dir
└── experiment
└── D0
├── temperature
│ ├── V_3_4
│ └── V_9_4
└── weather
├── S1
└── S2
您可以将所有这些放入一个 for 循环中以执行所有文件夹。
编辑:要更改所有目录:
main_dir
└── experiment
├── D0
│ ├── temperature
│ │ ├── S1
│ │ └── S2
│ └── weather
│ ├── S1
│ └── S2
└── D1
├── temperature
│ ├── S1
│ ├── S2
│ └── S3
└── weather
├── S1
├── S2
└── S3
Metadataframe <- data.frame(Sample_name = c("V_3_4", "V_9_4", "H_13_5"), S_number = c("S1", "S2", "S3"))
dirs <- list.dirs('~/main_dir', recursive = TRUE, full.names = TRUE)
if(any(grepl(paste(Metadataframe$S_number, collapse = "|"), dirs))){
for(dir in dirs[grep(paste(Metadataframe$S_number, collapse = "|"), dirs)]){
dir_path <- sub("S[0-9]+", "", dir)
sample <- sub(dir_path, "", dir)
new_path <- paste0(dir_path, Metadataframe$Sample_name[which(Metadataframe$S_number == sample)])
system(paste("mv", dir, new_path))
}
}
main_dir
└── experiment
├── D0
│ ├── temperature
│ │ ├── V_3_4
│ │ └── V_9_4
│ └── weather
│ ├── V_3_4
│ └── V_9_4
└── D1
├── temperature
│ ├── H_13_5
│ ├── V_3_4
│ └── V_9_4
└── weather
├── H_13_5
├── V_3_4
└── V_9_4