编写Shell脚本实现文件名编号的互补序列替换需求
解决文件LIFO重命名的方案
核心转换逻辑
原文件编号为N,总文件数为M(此处为162),新编号计算公式:新编号 = M + 1 - N。比如原编号1对应新编号162,原编号162对应新编号1,完美反转顺序。
方法1:Windows PowerShell
- 打开PowerShell,切换到目标文件所在目录
- 执行以下脚本(将
162替换为你的实际总文件数):
$total = 162 Get-ChildItem -File | ForEach-Object { if ($_.Name -match '(\w+)_(\d+)_(\w+)\.(\w+)') { $prefix = $matches[1] $oldNum = [int]$matches[2] $middle = $matches[3] $ext = $matches[4] $newNum = $total + 1 - $oldNum $newName = "$prefix`_$newNum`_$middle.$ext" # 先取消下面注释测试输出,确认无误后再启用重命名 # Write-Output $newName Rename-Item -Path $_.FullName -NewName $newName } }
方法2:Linux/macOS Bash脚本
- 在文件目录下创建
rename.sh脚本:
#!/bin/bash total=162 for file in *.ext; do # 替换为你的实际扩展名,或用*匹配所有文件 if [[ $file =~ ^([a-zA-Z0-9]+)_([0-9]+)_([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)$ ]]; then prefix=${BASH_REMATCH[1]} old_num=${BASH_REMATCH[2]} middle=${BASH_REMATCH[3]} ext=${BASH_REMATCH[4]} new_num=$((total + 1 - old_num)) new_name="${prefix}_${new_num}_${middle}.${ext}" # 先取消下面注释测试输出,确认无误后再启用重命名 # echo "$file -> $new_name" mv "$file" "$new_name" fi done
- 赋予执行权限:
chmod +x rename.sh - 执行脚本:
./rename.sh
方法3:Python脚本(跨平台)
- 创建
rename_files.py:
import os import re total_files = 162 # 匹配文件名格式的正则,可根据实际调整 pattern = re.compile(r'^(\w+)_(\d+)_(\w+)\.(\w+)$') for filename in os.listdir('.'): if os.path.isfile(filename): match = pattern.match(filename) if match: prefix, old_num_str, middle, ext = match.groups() old_num = int(old_num_str) new_num = total_files + 1 - old_num new_filename = f"{prefix}_{new_num}_{middle}.{ext}" # 先取消下面注释测试输出,确认无误后再启用重命名 # print(f"{filename} -> {new_filename}") os.rename(filename, new_filename)
- 运行脚本:
python rename_files.py
关键注意事项
- 操作前务必备份文件,避免重命名失误导致数据丢失
- 确认总文件数参数和实际数量完全一致
- 如果文件名格式和示例有差异,调整正则表达式的匹配规则即可
内容的提问来源于stack exchange,提问作者udippel
相关产品推荐
相关产品推荐

