ディレクトリ内の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

少なくとも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

おすすめ記事