我想根据单独的 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