命令行批量重命名文件:移除文件名前缀的实现方法
批量重命名命令行解决方案
刚好之前处理过类似的批量重命名需求,给你两个在命令行里好用的办法,适配不同的系统环境:
方法一:用Perl版rename命令(简洁高效)
如果你的系统是Debian、Ubuntu这类发行版,默认自带的rename是Perl版本的,直接用这条命令就行:
rename 's/^\d+_//' *.faa
命令解释:
s/^\d+_//是Perl正则替换规则:^匹配文件名的开头\d+匹配一个或多个数字_匹配下划线- 整体意思是把文件名开头的「数字+下划线」替换为空,正好去掉你不需要的前缀。
如果是RHEL、CentOS这类系统,默认的rename是另一个版本,你需要先安装Perl版的rename(包名通常是perl-rename),然后用prename命令代替rename执行上面的语句。
方法二:用Bash循环+mv命令(兼容性拉满)
要是你不想折腾安装额外工具,用系统自带的Bash循环和mv命令就能搞定,所有类Unix系统都支持:
for file in *.faa; do mv "$file" "${file#*_}" done
命令解释:
${file#*_}是Bash的参数扩展语法:#表示从文件名的开头开始删除*_表示匹配第一个下划线及其之前的所有内容- 所以这个表达式会直接返回去掉前缀后的新文件名。
安全小提示:
在执行实际重命名之前,建议先把mv换成echo,预览一下重命名的结果,避免误操作:
for file in *.faa; do echo "$file" -> "${file#*_}" done
确认输出的新文件名都是你想要的,再把echo改回mv执行即可。
内容的提问来源于stack exchange,提问作者Rowena Ahia
相关产品推荐
相关产品推荐

