将列表的行添加为文件名中的前缀

hol*_*ola 6 bash text-processing

如何将列表元素作为前缀加上“_”添加到文件名?

文件名:

aaa.gf
bbr.gf
cee.gf
Run Code Online (Sandbox Code Playgroud)

列表.txt:

pplo
125ss
35w2
Run Code Online (Sandbox Code Playgroud)

想要的结果:

pplo_aaa.gf
125ss_bbr.gf
35w2_cee.gf
Run Code Online (Sandbox Code Playgroud)

所有元素都在同一个文件夹中。所有目标文件都以 .gf 结尾。list.txt 的行应对应于按字母顺序排序的文件名,如示例所示。

卡住了:

for f in *.gf; do mv "$f"  LINE_"$f"; done
Run Code Online (Sandbox Code Playgroud)

不知道如何使 LINE 工作。

谢谢。

ste*_*ver 5

怎么样

mapfile -t list < list.txt

i=0
for f in *.gf; do 
  echo mv "$f" "${list[i++]}_$f"
done
Run Code Online (Sandbox Code Playgroud)

echo一旦你对它做正确的事情感到高兴,就删除它。


Sté*_*las 5

使用 POSIXsh语法:

#! /bin/sh -
for f in *.gf; do
  IFS= read -r line <&3 || break
  mv -i -- "$f" "${line}_$f"
done 3< list.txt
Run Code Online (Sandbox Code Playgroud)

Globbing(此处*.gf)按词法对文件列表进行排序(根据现代和 POSIX 兼容 shell 中的语言环境整理顺序)。