我怎样才能重命名多个文件,例如,
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 源 目标 完毕
- 接下来提取要保留的部分,即
.
使用awk
as 分隔的字符串的第二个字段,
$ 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
被单独留下。