Linux下如何在文件名中间添加连续序号并保留原文件信息
解决方案
要实现在文件名中间插入连续两位序号并保留原文件全部信息,可以通过Bash的参数扩展提取原文件名的关键部分,结合排序确保序号连续对应,以下是修正后的脚本:
#!/bin/bash a=1 # 对文件进行自然排序,保证序号按原文件时间/名称顺序分配 for i in $(ls -v Cust*); do # 提取文件名前缀(第一个"."之前的内容) prefix="${i%%.*}" # 提取前缀后的剩余部分(包含日期、时间、后缀) rest="${i#*.}" # 拼接新文件名:前缀 + 两位序号 + 原剩余部分 new_filename="${prefix}.$(printf "%02d" "$a").${rest}" # 执行重命名,-i选项防止意外覆盖已有文件 mv -i -- "$i" "$new_filename" # 序号自增 ((a++)) done
关键说明
文件排序:
使用ls -v Cust*进行自然排序,会按文件名中的数字(如时间戳1349、1356、1527)从小到大排列,避免序号与原文件顺序错乱。文件名拆分:
${i%%.*}:从文件名末尾删除最长的.*匹配,得到前缀Customer_Branch_Record。${i#*.}:从文件名开头删除最短的*.匹配,得到原文件的日期、时间及后缀部分(如20230303.1349.DAT)。
序号格式化:
printf "%02d" "$a"生成两位固定长度的序号,不足两位时自动补0(如1→01、2→02)。
执行效果
运行脚本后,原文件会被重命名为:
Customer_Branch_Record.01.20230303.1349.DAT Customer_Branch_Record.02.20230303.1356.DAT Customer_Branch_Record.03.20230303.1527.DAT
内容的提问来源于stack exchange,提问作者Lex Luthor
相关产品推荐
相关产品推荐

