例如,我的工作目录中有 100 个文件的列表
GCF_000021605.1_ASM2160v1_genomic.fa
GCF_001887455.1_ASM188745v1_genomic.fa
GCF_003719755.1_ASM371975v1_genomic.fa
GCF_000021625.1_ASM2162v1_genomic.fa
我想将它们重命名为
Vibrio_cholerae_O1_biovar_El_Tor_str._N16961_strain=N16961z
Vibrio_cholerae_O395_strain=O395
Vibrio_cholerae_M66-2_strain=M66-2
Vibrio_cholerae_O395_strain=O395
这些新文件名位于文本文档中,排列顺序与目录中原始文件名列表的顺序相同。
有没有办法完全重命名文件?
while read -u 3 -r name1 && read -u 4 -r name2
do
mv "${name1}" "${name2}".fasta
done 3<old_name_4.txt 4<new_name_4.1.txt
old_name.4.txt
file 包含需要重命名的目录中的文件名,并且new_4.1.txt
file 包含按相同顺序排列的文件的新名称。
奇怪的是我的代码不起作用。当我运行命令时,它显示错误
mv: cannot move 'GCF_000021605.1_ASM2160v1_genomic.fa' to 'Vibrio_cholerae_O1_biovar_El_Tor_str._N16961_strain=N16961'$'\r''.fasta': No such file or directory
有没有办法自动执行此任务?任何形式的帮助将不胜感激。谢谢你!!
答案1
至少有一个源文件来自 Windows 系统,因此具有不同的行结尾(CR-LF 而不是 CR)。您需要对文本文件进行后处理才能解决此问题
dos2unix new_name_4.1.txt
或者
tr -d '\r' <new_name_4.1.txt >tmp && mv -f tmp new_name_4.1.txt