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

如何根据父目录名称批量重命名后缀为.gbk的文件?

实现方案

你可以通过以下两种常见系统环境的脚本实现批量重命名,操作前建议先备份所有目标文件避免误操作。

Linux/macOS 终端方案

方案1:兼容性最高的bash循环(推荐)

首先执行以下命令预览所有即将执行的重命名操作,确认规则匹配正确:

for file in cluster1_bin.*_res/*.gbk; do
    # 提取文件所属父目录名称
    parent_dir=$(basename $(dirname "$file"))
    # 提取文件名中 .region 及之后的后缀部分
    suffix=$(basename "$file" | sed 's/^.*\.region/.region/')
    # 拼接新的完整文件路径
    new_file="$(dirname "$file")/${parent_dir}${suffix}"
    # 打印待执行命令,确认无误后再执行实际重命名
    echo "mv \"$file\" \"$new_file\""
done

确认打印的所有重命名命令符合预期后,将最后一行的echo删除,或者直接在上述命令末尾追加| bash即可执行实际重命名。
如果需要避免同目录下重名文件覆盖,可以使用带重名处理的版本:

for file in cluster1_bin.*_res/*.gbk; do
    parent_dir=$(basename $(dirname "$file"))
    suffix=$(basename "$file" | sed 's/^.*\.region/.region/')
    new_file="$(dirname "$file")/${parent_dir}${suffix}"
    count=1
    # 重名自动追加序号
    while [ -f "$new_file" ]; do
        new_file="$(dirname "$file")/${parent_dir}_${count}${suffix}"
        count=$((count+1))
    done
    mv "$file" "$new_file"
done

方案2:Perl版rename一键命令(适合Debian/Ubuntu等发行版)

如果你的系统预装了Perl版本的rename命令,可直接执行以下命令完成重命名:

rename 's|(cluster1_bin\.\d+_res)/.*\.region|$1/$1.region|' cluster1_bin.*_res/*.gbk

Windows PowerShell 方案

首先执行预览命令确认重命名规则正确:

# 预览所有重命名操作
Get-ChildItem -Path "cluster1_bin.*_res" -Filter "*.gbk" | ForEach-Object {
    $parent_name = $_.Directory.Name
    $suffix = $_.Name -replace '^.*\.region', '.region'
    $new_name = $parent_name + $suffix
    Write-Host "Rename-Item -Path `"$($_.FullName)`" -NewName `"$new_name`""
}

确认无误后,将最后一行的Write-Host替换为以下内容即可执行实际重命名:

Rename-Item -Path $_.FullName -NewName $new_name -Force

注意事项

  • 如果需要处理的目录前缀不是cluster1_bin,可自行修改脚本中的目录匹配规则,例如要处理所有_res结尾的目录,将cluster1_bin.*_res替换为*_res即可
  • 如果你的文件后缀规则不是.region开头,可自行调整正则匹配规则适配你的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:45:02