如何使用r在多个顺序文件名(wav文件,来自生物声学监测)中移动时间戳



我部署了被动声学记录器来探测动物的叫声,但在我的一个设备上,日期& &;时间设置搞砸了,恢复为默认值(2000年1月1日)。然后,设备记录一个月,写入20分钟的文件,这些文件是每天的;时间上。例如,文件名为swift1_20000101_02000 .wav (deviceName_YYYYMMDD_HHMMSS)。现在我真的不想手动重命名2000多个单独的文件。

我知道实际的开始日期&我想知道是否有一种方法可以输入实际的开始日期/时间,并将所有文件移出。所以swift1_20000101_000000会变成swift1_20220617_093000, swift1_20000101_002000会变成swift1_20220617_095000,以此类推。

任何想法?我知道你可以用file.rename(), paste0()等重命名文件,但我需要一个函数,按顺序在目录内的所有文件上迭代,我没能找到能做到这一点的东西。任何想法或想法将不胜感激!

听起来像是要在每个文件名中隐含的日期/时间上加上8203天9小时30分钟。试试这个。假设要更新当前目录中的所有文件。

library(lubridate)
library(stringr)     

files <- list.files(getwd())     

for(f in 1:length(files)){
x <- files[f]
orig <- ymd_hms(paste0(substr(x, 8, 11),"-",substr(x,12,13),"-",substr(x,14,15)," ",
substr(x, 17,18),":",substr(x, 19,20),":", substr(x, 21,22)))
y <- as.character(orig + days(8203) + hours(9) + minutes(30))
new <- paste0("swift1_", str_replace(str_remove_all(y, "-|:"), " ","_"),".wav")
file.rename(from = x, to = new)

}

首先我们从目录中获取所有的文件名。然后,对于每个文件,我们提取日期组件,组合,转换为日期,添加调整,然后将日期组件拆分以形成新文件名。最后,我们重命名原始文件。

最新更新