如何批量给自己的文件重命名

--by mk 2021-2-18 21:30

应用Windows日常办公,很多时候为了更快识别自己文件夹的文件,我们常需要对文件进行重命名自己偏好习惯,个位数的文件重命名,无非就是耗费自己一两分钟的时间,点点鼠标,然后重命名,输入文件名即可

前面分享了:Linux命令行,菜鸟报错之隐藏在换行中的字符^M,我们下载下来的文件,那么好了,现在问题是我需要对下列500+文件进行个性化重命名,要在每个文件 前加上数据收集的年份区间,

比如2007_2008_DEMO_E.XPT,难道还选择鼠标点点:

是不是看得眼花缭乱。你要是不乱的话,反正我是乱了!!!

要是鼠标点点点,想想这个工作量,都是可怕。而且,中间还不能出错喔,万一年份搞错了,那 排查起来,可又是想跳楼的心都有。

那么,有没有更好的方法?

听过Jimmy老师的课的都知道啦,解决问题的能力,就是编程的能力。这种活,必须是代码批量处 理啊。。

OK,自己想要的最终命名格式为:把每个文件之前加上年份区间,而且保证每个文件的对应年份准确无 误,这样子:

 

把文件下载网站中的注释文件复制下载下来,其长这样:

 

保存成TXT文件,然后读进R,后面就开心的玩耍吧:

rm(list = ls())
##读入文件
dat <- data.table::fread('NHANESLaboratoryData.txt',
             data.table = F)
##去除RDC Only文件,因为文件不对外开放,没有下载链接
library(tidyverse)
tmp <- str_detect(dat$`Data File`,'RDC Only')
tmp <- dat[!tmp,]
tmp$`Data File` <- unlist(lapply(str_split(tmp$`Data File`,' '), 
function(x)x[[1]][1]))

##把文件夹下以XPT后缀的文件全部读取进来
xpt <- as.data.frame(list.files('.','.XPT'))
colnames(xpt) <- 'names'

处理后tmp文件就长这样了:

xpt读进来处理后成这样:

好办,通过xpt[,2]和tmp[,'Data File']列进行匹配,以确定自己是否全部文件已经下载完成。

最后就是拼接,tmp文件中,第一列(Years)和第四列(Data File)拼接起来:

mainNames <- unlist(lapply(str_split(xpt[,1],'\\.'), function(x)x[1]))
                           
xpt <- mutate(xpt,mainNames = mainNames)
                           
##通过xpt[,2]和tmp[,'Data File']列进行匹配
                           
tmp <- tmp[tmp$`Data File` %in% xpt$mainNames,]
                           
##构建最后重命名的文件名称,成为2003—2004_L06AGE_C.XPT
                           
tmp$fileRename <- paste0(tmp$Years,'_',tmp$`Data File`,'.XPT')
                           
tmp$`Data File` <- paste0(tmp$`Data File`,'.XPT')
                           
##其实就是一个函数搞定,批量,无误!
file.rename(tmp$`Data File`,tmp$fileRename)

最后,文件重命名为:

完美!!这样看起来,极大利于后续处理了。任务完成!!!(偷偷的告诉你哟,file.rename函数来自 于base包的哟,xpt文件为SAS数据文件,可以通过R中,foreign包一键读取哟)

思考题:

为什么这个学生这个时候选择使用R语言去进行文件批量重命名呢,其实是有问题他Linux学的不够好,那么,亲爱的读者,你能写出一个Linux命令来代替它的R脚本吗?

文末友情推荐

(0)

相关推荐