Linux 如何一次编辑多个文件名?
我有一个满是.txt文件(2000个文件)的目录。他们的名字很长。我想编辑他们的名字,只保留他们名字里面的某些字母作为文件名。 像这样:Linux 如何一次编辑多个文件名?,linux,r,filenames,Linux,R,Filenames,我有一个满是.txt文件(2000个文件)的目录。他们的名字很长。我想编辑他们的名字,只保留他们名字里面的某些字母作为文件名。 像这样: UNCID_279113.TCGA-A6-2683-01A-01R-0821-07.100902_UNC7-RDR3001641_00025_FC_62EPOAAXX.1.trimmed.annotated.gene.quantification.txt 我想去掉这个长名称,只保留名称从TCGA开始,在三个-之后结束;例如,我的新文件名是:TCGA-A6-2
UNCID_279113.TCGA-A6-2683-01A-01R-0821-07.100902_UNC7-RDR3001641_00025_FC_62EPOAAXX.1.trimmed.annotated.gene.quantification.txt
我想去掉这个长名称,只保留名称从TCGA
开始,在三个-
之后结束;例如,我的新文件名是:TCGA-A6-2683-01A
有人知道我如何在一个目录中对整个文件执行此操作吗 假设文件位于当前目录中:
library(gsubfn)
pat <- "TCGA-[^-]*-[^-]*-[^-]*"
file.names <- dir(pattern = pat)
new.names <- strapplyc(file.names, pat, simplify = TRUE)
file.rename(file.names, new.names)
或在Windows上:
# Windows
writeLines(paste("rename", file.names, new.names), con = "tcga_rename.bat")
shell("tcga_rename.bat")
修订版:分解了
pat
,简化并添加了变体。您可以这样做:
pattern <- ".*(TCGA-[^-]+-[^-]+-[^-]*).*"
file.rename(
list.files("."),
sub(pattern, "\\1", list.files("."))
)
pattern您可以使用list.files()
获取目录中的文件名列表,然后使用替换为正则表达式编辑名称,然后使用file.rename
实际执行重命名
类似于(未经测试):
curfiles假设您的文件位于当前工作目录中,请重试
library(stringr)
files <- list.files(".", pattern=".txt")
file.rename(files, str_extract(files, "TCGA(-\\w+){3}"))
库(stringr)
文件您可以使用awk
和/或
curfiles <- list.files(pattern='TCGA') # only grab files with TCGA in them
newfiles <- sub("^.*(TCGA-[a-zA-z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+).*$", "\\1", curfiles)
file.rename(curfiles,newfiles)
library(stringr)
files <- list.files(".", pattern=".txt")
file.rename(files, str_extract(files, "TCGA(-\\w+){3}"))