实现Bash重命名脚本duplq.sh:按参数批量修改文本文件名
实现批量重命名文本文件的Bash脚本
duplq.sh 我来帮你搞定这个批量重命名的Bash脚本,完全贴合你描述的需求——给当前目录下的文本文件按指定规则批量改名,比如执行duplq.sh pic 0 3时,pic0.txt变pic3.txt、pic1.txt变pic4.txt,以此类推。
下面是完整的脚本代码:
#!/bin/bash # 参数检查:确保传入3个参数 if [ $# -ne 3 ]; then echo "用法: $0 <前缀> <起始数字> <偏移量>" echo "示例: $0 pic 0 3" exit 1 fi PREFIX="$1" START_NUM="$2" OFFSET="$3" # 验证第二个和第三个参数是正整数 if ! [[ "$START_NUM" =~ ^[0-9]+$ ]] || ! [[ "$OFFSET" =~ ^[0-9]+$ ]]; then echo "错误: 第二个和第三个参数必须是正整数" exit 1 fi # 遍历匹配前缀+数字+.txt的文件,按数字升序处理 for file in "$PREFIX"*.txt; do # 提取文件名中的数字部分 if [[ "$file" =~ ^$PREFIX([0-9]+)\.txt$ ]]; then CURRENT_NUM="${BASH_REMATCH[1]}" # 只处理数字大于等于起始数字的文件 if [ "$CURRENT_NUM" -ge "$START_NUM" ]; then NEW_NUM=$((CURRENT_NUM + OFFSET)) NEW_FILE="$PREFIX$NEW_NUM.txt" # 检查目标文件是否已存在,避免意外覆盖 if [ -f "$NEW_FILE" ]; then echo "警告: 目标文件 $NEW_FILE 已存在,跳过 $file" continue fi # 执行重命名并显示过程 mv -v "$file" "$NEW_FILE" fi fi done
脚本核心逻辑拆解
- 参数校验:先检查是否传入了3个必要参数,再验证第二、三个参数是正整数,避免无效输入搞砸脚本运行。
- 精准匹配文件:用正则表达式
^$PREFIX([0-9]+)\.txt$精准提取文件名里的数字部分,只处理符合前缀+数字+.txt格式的文本文件,不会误改其他文件。 - 重命名规则:只有文件名中数字大于等于起始数字的文件才会被处理,新数字就是原数字直接加上偏移量——完全符合你给出的示例逻辑(0+3=3,1+3=4)。
- 安全防护:重命名前会检查目标文件是否存在,避免不小心覆盖已有的文件;同时用
mv -v显示每一步的重命名操作,方便你确认执行结果。
使用步骤
- 把上面的代码保存为
duplq.sh文件。 - 给脚本添加执行权限:
chmod +x duplq.sh - 按需求执行脚本,比如你提到的示例:
./duplq.sh pic 0 3
额外注意点
- 脚本只会处理当前目录下的文件,不会递归处理子目录里的文件。
- 就算文件名里有空格或者特殊字符,脚本也能正常处理,因为我们全程用双引号包裹了变量。
内容的提问来源于stack exchange,提问作者a_avelar
相关产品推荐
相关产品推荐

