根据单独的 txt 文件中的名称重命名 .gz 文件

根据单独的 txt 文件中的名称重命名 .gz 文件

我想根据单独的 txt 文件中的名称重命名 .gz 文件。我有一张包含 .gz 文件的地图,其名称为:

trooper10.gz
trooper11.gz 
trooper12.gz
etc.

我有一个单独的 txt 文件,其中第一列中包含所需名称,另一列中包含 .gz 名称(制表符分隔)。

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)

但我不确定如何 grep 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

相关内容