使用分隔符重命名多个文件

使用分隔符重命名多个文件

我怎样才能重命名多个文件,例如,

IonXpress_049.T11014.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam
IonXpress_050.T11114.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam

到,

T11014.bam 
T11114.bam

答案1

rename 's/.*?\.([^.]+).*/$1.bam/' *.bam -vn

-vn当您看到它能达到您想要的效果时,请删除。这是我的测试工具:

$ touch 34234234kh.TESTING00{1..3}.234978623478y234.bam
$ rename 's/.*?\.([^.]+).*/$1.bam/' *.bam -vn
34234234kh.TESTING001.234978623478y234.bam renamed as TESTING001.bam
34234234kh.TESTING002.234978623478y234.bam renamed as TESTING002.bam
34234234kh.TESTING003.234978623478y234.bam renamed as TESTING003.bam

答案2

有几种方法可以从命令行重命名。下面是一行代码。转到文件所在的目录.bam并尝试此操作,

for i in *.bam; do mv "$i" "$(echo $i | awk -F"." '{print $2}').bam"; done

怎么运行的:

  • 使用 for 循环和 shell glob 捕获所需的文件,
    对于我在* .bam中
        mv 源 目标
    完毕
  • 接下来提取要保留的部分,即.使用awkas 分隔的字符串的第二个字段,
    $ echo IonXpress_049.T11014.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam | awk -F"." '{print $2}'
    $ T11014

可以使用-F选项来使用自定义字段分隔符。查看man awk更多。

答案3

您可以使用精彩krename程序:

sudo apt-get install krename

在这个程序中你有一个预览结果,并且特别地,可以只使用特定范围的文件名掩码:

在此处输入图片描述

掩码位于 ➀。原始文件名位于 ➁,待命名文件名位于 ➂。如果一切正常,您可以按完成:➃ — 只有在此之后,文件才会真正重命名。

答案4

假如说

  • 所需名称 - “body”始终位于第一个点之后
  • 扩展.bam始终存在
  • 该目录是“平面”的,没有子目录

这个 Python 解决方案应该可以完成这项工作。部分数量可能会有所不同,但它仍然有效:

#!/usr/bin/env python3

import os
import shutil
import sys

directory = sys.argv[1]

for item in os.listdir(directory):
    if not item.startswith("."):
        edit = item.split("."); newname = (".").join([edit[1], edit[-1]])
        if len(edit) > 2:
            shutil.move(directory+"/"+item, directory+"/"+newname)

将其复制到一个空文件中,使其可执行(运行它时不使用前缀python3)并通过以下命令运行它:

</path/to/script> <directory_with_files>

以便:

monkey.banana.peanut.bam

变成

banana.bam

monkey.apple.peaunt.another_string.and_alot_more.bam

变成

apple.bam

尽管

something.bam

被单独留下。

相关内容