如何在Bash中将批量文件名的递增序号减1?
用Bash批量将文件序号减1的实现方法
完全可以用Bash实现这个需求,以下是具体的脚本和操作步骤:
核心逻辑
针对每个目标文件完成以下操作:
- 提取文件名末尾的三位数字序号
- 将序号转为整数并减1
- 把新序号格式化为带前导零的三位数字
- 替换原文件名中的序号完成重命名
实现脚本
for file in *.pdf; do # 提取文件名中的三位数字序号 old_num=$(echo "$file" | sed -E 's/.*-([0-9]{3})\.pdf/\1/') # 强制十进制解析序号(避免前导零触发八进制解析错误),再减1 new_num=$((10#$old_num - 1)) # 将新序号格式化为三位带前导零的字符串 new_num_str=$(printf "%03d" "$new_num") # 替换原文件名的序号部分,生成新文件名 new_file=$(echo "$file" | sed -E "s/-[0-9]{3}\.pdf/-$new_num_str\.pdf/") # 先打印重命名命令(测试阶段用),确认无误后去掉echo执行实际重命名 echo mv "$file" "$new_file" # mv "$file" "$new_file" done
使用说明
- 直接在目标文件所在目录的终端中运行上述代码,或者保存为
.sh脚本执行 - 测试阶段:保留
echo mv的写法,运行后会输出所有拟执行的重命名操作,核对每个文件的新名称是否符合预期 - 执行重命名:确认无误后,删除
echo,用mv "$file" "$new_file"完成实际文件重命名
额外提示
- 如果需要只处理特定前缀的文件(比如仅处理
kiril_lab_开头的文件),可以把*.pdf改成kiril_lab_*.pdf,针对性处理 - 脚本依赖
sed和printf工具,这两个工具在绝大多数Linux/macOS系统中默认自带
内容的提问来源于stack exchange,提问作者ppr
相关产品推荐
相关产品推荐

