Bash批量重命名pdb文件 实现文件名序号加1的简易命令方案
Bash批量重命名mol*.pdb文件(序号统一+1)
需求背景
当前工作目录下存在一批序号从0起始的pdb格式文件,初始命名如下:
mol0.pdb mol1.pdb mol2.pdb ... mol888.pdb
需要将所有文件的文件名序号统一加1完成重命名,最终效果如下:
mol1.pdb mol2.pdb mol3.pdb ... mol889.pdb
要求方案可直接在bash交互终端执行,无需单独编写脚本文件存储后运行,可基于常规for循环框架实现。
前置提醒
- 执行前请确认当前目录不存在
mol[最大序号+1].pdb这类重名文件,避免原有文件被覆盖 - 禁止从序号0开始正序重命名:正序处理时,
mol0.pdb改名为mol1.pdb会直接覆盖还未处理的原mol1.pdb,造成文件丢失,必须从最大序号文件开始倒序处理。
可直接执行的命令
写法1:沿用参考的文件遍历循环框架
不需要提前统计文件序号范围,自动识别所有符合命名规则的文件倒序处理,通用性最强:
for file in $(ls -v mol*.pdb | tac) do num=${file#mol} num=${num%.pdb} mv "$file" "mol$((num+1)).pdb" done
逻辑说明:
ls -v mol*.pdb按文件名里的数字做自然排序,输出从小到大排列的文件列表tac将列表倒序,实现从最大序号文件开始遍历${file#mol}去掉文件名开头的mol前缀,${num%.pdb}去掉后缀.pdb,提取纯数字序号$((num+1))做整数运算得到新序号,直接执行重命名
写法2:已知最大序号为888的极简一行命令
固定场景下可以直接用seq生成倒序序号序列,整行复制到终端回车即可运行:
for i in $(seq 888 -1 0); do mv mol${i}.pdb mol$((i+1)).pdb; done
内容的提问来源于stack exchange,提问作者James Starlight
相关产品推荐
相关产品推荐

