Linux
將目錄中的 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.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
有沒有辦法自動化這個任務?任何形式的幫助將不勝感激。謝謝!!
至少有一個源文件來自 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