我有大约 2000 个 fasta 文件,其结构如下:
Name_ID#_Name2_ID1...2000.fasta
我想将文件名的顺序更改为:
Name2.Name_ID#_ID1...2000.fasta
有人对我如何实现这一目标有建议吗?
答案1
有多种方法可以解决这个问题。一种方法是:
#!/bin/bash
for i in *.fasta; do
tokens=( $(echo "${i}" | sed -e 's/_/ /g') )
newName="${tokens[2]}.${tokens[0]}_${tokens[1]}_${tokens[3]}'"
echo "mv ${i} ${newName}"
done
.fasta
该脚本循环遍历当前目录中以;结尾的每个文件。每次循环时,变量都${i}
包含当前文件名。
接下来,该脚本将文件名中的sed
下划线 ( ) 更改_
为空格,并将其存储为标记数组。对于名为 的文件 Name_ID1_Name2_ID1000.fasta
,您最终会得到:
tokens[0]='Name'
tokens[1]='ID1'
tokens[2]='Name2'
tokens[3]='ID1000.fasta'
接下来,脚本newName
根据这些标记和您对所需订单的描述创建 。最后,脚本打印mv
用于执行重命名的命令。
如果您运行该脚本,它会打印它将执行的操作。您可以检查它以确保它按照您想要的方式运行。如果是这样,那么您可以删除echo
:
mv "${i}" "${newName}"
并再次运行它。这样,它实际上就会执行重命名。