You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写脚本用其他文件名替换指定文件名中的特定格式部分?

我来帮你分两部分解决这两个文件处理需求,用bash脚本就能搞定,下面是具体实现和说明:

1. 给DR文件夹的文件按数字递增重命名至40

这个需求是把/home/User/Desktop/DR里的文件依次命名为1.ext、2.ext…直到40.ext,脚本会自动保留原文件的后缀:

#!/bin/bash
# 目标文件夹路径
DR_DIR="/home/User/Desktop/DR"
# 初始化计数器
counter=1

# 遍历文件夹内的所有文件(跳过子目录)
for file in "$DR_DIR"/*; do
    # 只处理普通文件
    if [ -f "$file" ]; then
        # 提取文件后缀(比如.txt、.png)
        file_ext="${file##*.}"
        # 重命名文件,格式为「数字.后缀」
        mv "$file" "$DR_DIR/$counter.$file_ext"
        # 计数器加1
        ((counter++))
        # 达到40就停止处理
        if [ $counter -gt 40 ]; then
            break
        fi
    fi
done

注意事项:

  • 如果DR文件夹里的文件超过40个,脚本只会重命名前40个,剩下的文件保持原样;
  • 如果文件少于40个,则只会重命名现有文件,不会生成空文件;
  • 脚本会跳过文件夹里的子目录,只处理普通文件。
2. 匹配rsfMRI文件夹的####_##格式并替换对应部分

首先明确匹配规则:文件名是「4位数字(≤40,可重复)_两位数字(仅01或03)」,比如0001_01.nii、0040_03.txt都符合要求。下面分两种常见的替换场景给出脚本:

场景1:把所有符合格式的文件的前4位数字替换为1-40的递增数字(每个数字对应01和03后缀)

比如把XXXX_01.ext替换为0001_01.ext、0002_01.ext…0040_01.ext,03后缀同理:

#!/bin/bash
RSFMRI_DIR="/home/User/Desktop/rsfMRI"

# 遍历1到40的数字
for num in {1..40}; do
    # 把数字格式化为4位(比如1→0001,10→0010)
    formatted_num=$(printf "%04d" $num)
    
    # 处理后缀为01的文件
    for rs_file in "$RSFMRI_DIR"/*_01.*; do
        # 匹配「4位数字_01.后缀」的格式
        if [[ $rs_file =~ ([0-9]{4})_01\.(.*) ]]; then
            # 替换前4位数字为格式化后的数字
            new_file="${RSFMRI_DIR}/${formatted_num}_01.${BASH_REMATCH[2]}"
            mv "$rs_file" "$new_file"
        fi
    done
    
    # 处理后缀为03的文件
    for rs_file in "$RSFMRI_DIR"/*_03.*; do
        if [[ $rs_file =~ ([0-9]{4})_03\.(.*) ]]; then
            new_file="${RSFMRI_DIR}/${formatted_num}_03.${BASH_REMATCH[2]}"
            mv "$rs_file" "$new_file"
        fi
    done
done

场景2:和DR文件夹的重命名结果对应替换

比如DR里的1.txt对应rsfMRI里的XXXX_01.txt→1_01.txt、XXXX_03.txt→1_03.txt,以此类推:

#!/bin/bash
DR_DIR="/home/User/Desktop/DR"
RSFMRI_DIR="/home/User/Desktop/rsfMRI"
counter=1

# 遍历DR里已重命名的文件
for dr_file in "$DR_DIR"/*; do
    if [ -f "$dr_file" ]; then
        file_ext="${dr_file##*.}"
        
        # 替换rsfMRI里对应后缀的01文件
        for rs_file in "$RSFMRI_DIR"/*_01.$file_ext; do
            if [[ $rs_file =~ ([0-9]{4})_01\.$file_ext ]]; then
                mv "$rs_file" "$RSFMRI_DIR/${counter}_01.$file_ext"
            fi
        done
        
        # 替换rsfMRI里对应后缀的03文件
        for rs_file in "$RSFMRI_DIR"/*_03.$file_ext; do
            if [[ $rs_file =~ ([0-9]{4})_03\.$file_ext ]]; then
                mv "$rs_file" "$RSFMRI_DIR/${counter}_03.$file_ext"
            fi
        done
        
        ((counter++))
        if [ $counter -gt 40 ]; then
            break
        fi
    fi
done

使用方法:

  1. 把上面的脚本复制到文本编辑器,保存为rename_files.sh;
  2. 打开终端,给脚本添加执行权限:chmod +x rename_files.sh;
  3. 运行脚本:./rename_files.sh。

内容的提问来源于stack exchange,提问作者hsayya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:37:32