別のtxtファイルの名前に基づいて.gzファイルの名前を変更します。

別のtxtファイルの名前に基づいて.gzファイルの名前を変更します。

別のtxtファイルの名前に基づいて.gzファイルの名前を変更したいと思います。次の名前の.gzファイルを含むマップがあります。

trooper10.gz
trooper11.gz 
trooper12.gz
etc.

最初の列には目的の名前があり、他の列には.gz名(タブで区切られている)を持つ別々のtxtファイルがあります。

B25    trooper10
C76    trooper11
A87_2    trooper12

したがって、ファイル名を次のように変更する必要があります。

B25.gz
C76.gz
A87_2.gz

頑張った

for i in *.gz; do
line=$(grep -x -m 1 -- "${i}" /path_to_txtfile/list_names.txt)

しかし、txtファイルでその列を特定する方法がわかりません。 gzファイルが多すぎて回避策があるかどうかを見たいです。

答え1

はい、ファイルシステムからgzファイルをインポートするのではなく、ファイルを読み込むことから始めます。

while IFS=$'\t' read -r newName oldName; do
    mv -- "$oldName".gz "$newName.gz"
done < names_file

答え2

それだけではありません。

<list_names.txt awk -F'\t' '{printf "%s.gz\0%s.gz\0", $2, $1}' | xargs -r0n2 mv --

またはより効率的に:

perl -F'\t' -lae 'rename "$F[1].gz", $"F[0].gz" or warn "$F[1].gz: $!\n"' list_names.txt

関連情報