技术问询:如何用rename工具批量移除文件名中指定特征后缀
用
rename批量重命名文件的解决方案 要实现你需要的重命名规则——移除文件名中从“_后跟8个大写字母”开始的所有字符,仅保留前缀和文件扩展名——可以使用Perl版本的rename工具(多数Linux发行版默认预装),通过正则表达式匹配并替换文件名。
执行步骤
- 先预览重命名效果(不会实际修改文件,放心测试):
rename -n 's/_[A-Z]{8}.*(\.[^.]+)$/$1/' *
- 确认预览结果符合预期后,去掉
-n参数执行实际重命名:
rename 's/_[A-Z]{8}.*(\.[^.]+)$/$1/' *
正则表达式逻辑拆解
_[A-Z]{8}:精准匹配下划线开头,紧跟8个大写英文字母的片段,这就是你要移除内容的起始标记.*:匹配这个起始标记之后,直到扩展名之前的所有任意字符(\.[^.]+)$:捕获文件名末尾的扩展名部分(从最后一个点到结尾,确保即使文件名里有多个点也能正确保留最终扩展名)$1:替换时保留捕获到的扩展名,前面匹配到的所有内容都会被删除
示例验证
拿你给出的文件名测试,完全符合预期:
- 原始:
4585_10_148_H2A119Ub_GTCTGTCA_S51_mcdf_mdup_ngsFlt.fm→ 处理后:4585_10_148_H2A119Ub.fm - 原始:
4585_32_148_1_INPUT_previous_AGAGTCAA_S72_mcdf_mdup_ngsFlt.bw→ 处理后:4585_32_148_1_INPUT_previous.bw
额外提示
- 如果你的系统是BSD/macOS,默认的
rename是另一个版本,语法不同,建议先安装Perl版的rename(比如通过brew install rename)再使用上述命令。 - 如果目标文件只有特定扩展名,可以把命令里的
*换成*.fm *.fw *.bw,避免误改其他文件。
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

