Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何一次编辑多个文件名?_Linux_R_Filenames - Fatal编程技术网

Linux 如何一次编辑多个文件名?

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

我有一个满是.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-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}"))