Linux中使用rename命令批量重命名文件未生效,请求排查原因
批量修改文件名:rename命令不生效的解决办法
问题描述
原始文件名:
2311110-1_1.umi_bc1.fastp.fq.gz 2311110-1_1.umi.fastp.fq.gz
需要修改为:
231110-1_1.umi_bc1.fastp.fq.gz 231110-1_1.umi.fastp.fq.gz
尝试执行以下Perl风格的rename命令但未生效:
rename 's/2311110/231110/' 2311110*
因文件数量过多,无法逐个用mv命令修改。
问题原因与解决办法
你的命令本身是Perl版本rename的正确语法,但问题大概率出在系统安装的rename版本上——Linux下常见两种rename工具:
- Perl版本:支持正则表达式替换,语法为
rename 's/旧模式/新模式/' 文件 - util-linux版本:仅支持简单字符串替换,语法为
rename 旧字符串 新字符串 文件
方案1:适配对应版本的rename命令
- 如果是util-linux版本,改用以下命令即可:
rename 2311110 231110 2311110* - 如果是Perl版本,可添加
-v参数查看执行过程,确认是否匹配到目标文件:rename -v 's/2311110/231110/' 2311110*
方案2:通用批量修改方法(不受rename版本限制)
用bash循环结合mv实现,兼容性更强:
for file in 2311110*; do mv "$file" "${file/2311110/231110}" done
该命令会遍历所有以2311110开头的文件,将文件名中的2311110替换为231110后完成重命名。
内容的提问来源于stack exchange,提问作者Bioinfotec
相关产品推荐
相关产品推荐

