匹配后批量重命名目录求助:将1_20_xx格式目录改为2_20_xx
批量重命名目录的解决方案
我来帮你搞定这个批量重命名目录的问题!你之前尝试的命令没生效,主要是因为mv没法直接用通配符做批量替换,而rename因为系统版本不同语法差异很大。下面给你几种稳行的方法:
方法1:Perl版rename(适用于Ubuntu/Debian等系统)
大部分Debian系的Linux默认带的是Perl版本的rename,用正则表达式来做替换非常灵活:
rename 's/^1_20_/2_20_/' 1_20_*
- 解释:
s/旧字符串/新字符串/是正则替换语法,^表示匹配字符串开头,这样只会替换目录名最前面的1_20_为2_20_,不会影响名称里其他位置的相同字符。
方法2:util-linux版rename(适用于RHEL/CentOS/Fedora等系统)
如果你的系统是RedHat系,大概率是util-linux版本的rename,语法更简单直接:
rename 1_20_ 2_20_ 1_20_*
- 解释:第一个参数是要替换的旧前缀,第二个是新前缀,最后是要匹配的所有目标目录。
方法3:通用bash循环(无依赖,所有bash环境都能用)
如果你的系统没有rename命令,用bash循环也能轻松实现:
for dir in 1_20_*; do mv "$dir" "${dir/1_20_/2_20_}" done
- 解释:循环遍历所有
1_20_开头的目录,然后用bash的参数替换${dir/旧/新}把目录名里的1_20_替换成2_20_,最后执行重命名。
小提示
在执行实际重命名前,你可以先测试一下命令是否正确,比如把mv换成echo mv,这样会打印出将要执行的重命名操作,确认没问题再去掉echo:
for dir in 1_20_*; do echo mv "$dir" "${dir/1_20_/2_20_}" done
内容的提问来源于stack exchange,提问作者Kate Maserati
相关产品推荐
相关产品推荐

