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

如何批量将xxx(内容).txt格式文件重命名为括号内内容.txt

批量重命名实现方案

操作前提示:所有命令建议先加echo试运行,确认新文件名符合预期后再去掉echo执行实际重命名,避免文件丢失或误改。

方法1:使用Perl版rename工具(最简便,主流Linux发行版默认预装)

直接匹配括号内内容生成新文件名,适配需求场景:

# 基础版本:仅提取括号内内容,保留原横杠,适配前两个文件的需求
rename 's/.*\((.*)\)\.txt/$1.txt/' *.txt

# 全适配版本:提取括号内容后删除所有横杠,覆盖第三个文件的特殊需求
rename 's/.*\((.*)\)\.txt/$1=~s|-||gr . ".txt"/e' *.txt

命令说明:正则里的\(和\)是转义后的括号,专门匹配文件名里的实际括号,$1取括号内的捕获分组内容。

方法2:纯Bash实现(无需额外工具,兼容性最强)

用原生参数展开处理文件名,完全不需要处理转义问题:

for file in *.txt; do
    # 提取括号内内容
    content="${file#*(}"
    content="${content%)*}"
    # 如需删除横杠,取消注释下面这行
    # content="${content//-}"
    mv -- "$file" "${content}.txt"
done

方法3:sed + mv 组合实现(适配sed处理思路)

解决括号转义问题的标准写法:

for file in *.txt; do
    new_name=$(echo "$file" | sed -E 's/.*\((.+)\)\.txt/\1.txt/')
    # 如需删除横杠,加上管道替换,替换为下行写法
    # new_name=$(echo "$file" | sed -E 's/.*\((.+)\)\.txt/\1.txt/' | sed 's/-//g')
    mv -- "$file" "$new_name"
done

这里的-E参数使用扩展正则,括号用反斜杠转义即可匹配实际的括号字符,不会出现转义错误问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:27:04