Linux

將目錄中的 100 個文件重命名為儲存在文本文件中的新文件名

  • July 1, 2019

例如,我的工作目錄中有 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

有沒有辦法自動化這個任務?任何形式的幫助將不勝感激。謝謝!!

至少有一個源文件來自 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

引用自:https://unix.stackexchange.com/questions/527917