たとえば、作業ディレクトリに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
少なくとも1つのソースファイルはWindowsシステム上にあるため、行末は異なります(CRの代わりにCR-LF)。この問題を解決するには、テキストファイルを後処理する必要があります。
dos2unix new_name_4.1.txt
または
tr -d '\r' <new_name_4.1.txt >tmp && mv -f tmp new_name_4.1.txt