将目录中的 100 个文件重命名为文本文件中存储的新文件名

将目录中的 100 个文件重命名为文本文件中存储的新文件名


例如,我的工作目录中有 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.txtfile 包含需要重命名的目录中的文件名,并且new_4.1.txtfile 包含按相同顺序排列的文件的新名称。

奇怪的是我的代码不起作用。当我运行命令时,它显示错误

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

相关内容