別の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