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 工作。
谢谢。
怎么样
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
一旦你对它做正确的事情感到高兴,就删除它。
使用 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 中的语言环境整理顺序)。