已知现在的文件命名为如下
$ll *txt
SRR10518003.txt
SRR10518004.txt
SRR10518005.txt
SRR10518006.txt
SRR10518007.txt
SRR10518016.txt
SRR10518027.txt
需要重新命名为如下
$ll *txt
CRI12_salt-alkali_leaf_12h_1.txt
CRI12_salt-alkali_leaf_3h_1.txt
CRI12_salt-alkali_leaf_48h_2.txt
CRI12_salt-alkali_root_48h_2.txt
CRI12_salt-alkali_leaf_12h_2.txt
CRI12_salt-alkali_leaf_48h_1.txt
CRI12_salt-alkali_root_48h_1.txt
准备文件
左侧原来的名字,右侧修改后的名字
$cat rename_list
SRR10518003 CRI12_salt-alkali_root_48h_1
SRR10518004 CRI12_salt-alkali_root_48h_2
SRR10518005 CRI12_salt-alkali_leaf_48h_1
SRR10518006 CRI12_salt-alkali_leaf_48h_2
SRR10518007 CRI12_salt-alkali_leaf_12h_1
SRR10518016 CRI12_salt-alkali_leaf_12h_2
SRR10518027 CRI12_salt-alkali_leaf_3h_1
代码展示与详解
$cat rename.sh
while IFS=$'\t' read -r line; do
set -- $line
mv "$1.txt" "$2.txt"
done < rename_list
IFS=$'\t' read -r line: 读取文件中的一行内容并将其存储在变量 line 中。IFS 被设置为 $'\t',这样可以保留行中的制表符
set -- $line: 将读取的行内容分解为单词,并将它们设置为位置参数($1, $2, …)
mv "$1.txt" "$2.txt": 使用第一个参数作为源文件名,第二个参数作为目标文件名,将以 .txt 结尾文件重命名
综上所述这段代码的作用是根据 rename_list 中每一行的内容,将指定的文件重命名为另一个文件