用分隔符重命名多个文件

Von*_*ton 5 command-line sed rename awk

我怎么能重命名多个文件,比如,

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
Run Code Online (Sandbox Code Playgroud)

到,

T11014.bam 
T11114.bam
Run Code Online (Sandbox Code Playgroud)

Oli*_*Oli 8

rename 's/.*?\.([^.]+).*/$1.bam/' *.bam -vn
Run Code Online (Sandbox Code Playgroud)

-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
Run Code Online (Sandbox Code Playgroud)


sou*_* c. 6

有几种方法可以从命令行重命名。这是一个单班轮。转到.bam文件所在的目录并尝试这个,

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

这个怎么运作:

  • 使用 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”。'{打印 $2}'
    $ T11014

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


Ado*_*obe 5

您可以使用精彩的krename程序:

sudo apt-get install krename
Run Code Online (Sandbox Code Playgroud)

在这个程序中,您可以预览结果,特别是可以使用特定范围的文件名掩码:

在此处输入图片说明

面具在?。在 ? 处看到原始文件名。以及 ? 处的待命名名称。如果看起来不错,您可以按完成:?— 只有在此之后,文件才会真正被重命名。