根据匹配的值重命名文件

时间:2015-03-22 23:44:30

标签: r rename file-rename batch-rename

我有一个我要重命名的照片文件夹。照片存储在几个子文件夹中,我想重命名照片,使用R在文件名中包含相应的元数据。

如果我使用以下方法创建文件名列表:

LF<-list.files(recursive=TRUE)

我得到这样的东西:

 [1] "1-South/L14_4848.jpg"  "1-South/L14_4849.jpg"  "1-South/L14_4850.jpg" 
 [4] "1-South/L14_4851.jpg"  "1-South/L14_4852.jpg"  "2-North/L14_4854.jpg" 
 [7] "2-North/L14_4855.jpg"  "2-North/L14_4856.jpg"  "2-North/L14_4857.jpg" 
 [10] "2-North/L14_4858.jpg"  "3-East/L14_4860.jpg"   "3-East/L14_4861.jpg" 

我有一个单独的数据框,其中包含每个文件的相应元数据。数据框包含匹配的照片名称(在这种情况下,文件以&#34开头; L&#34;)

Date<-"2014-04-28"
Location<-"ALK"
Site<-"PR2"
Habitat<-"Forest"
Quad<-1:12
Photo<-c("L14_4848.jpg","L14_4849.jpg","L14_4850.jpg","L14_4851.jpg","L14_4852.jpg","L14_4854.jpg","L14_4855.jpg","L14_4856.jpg","L14_4857.jpg","L14_4858.jpg","L14_4860.jpg","L14_4861.jpg")



Meta<-data.frame(Date,Location,Site,Habitat,Quad,Photo)

如何重命名各个子目录中的照片文件,以包含在&#34; Meta&#34;中找到的元数据。数据框。理想情况下,照片的完成文件名将如下所示

Location_Site_Habitat_Quad_Date_Photo

ALK_PR2_Forest_1_2014-04-28_L14_4848.jpg

1 个答案:

答案 0 :(得分:1)

试试这个,但在之前做一个备份:

LF <- LF[order(match(basename(LF), Meta$Photo))] # reorder if necessary
Meta <- Meta[, c("Location", "Site", "Habitat", "Quad", "Date", "Photo")] # col order
fn <- apply(Meta, 1, function(row) paste0(row, collapse = "_"))
file.rename(LF, file.path(dirname(LF), fn))