Unix中如何利用文件名首连字符前内容批量重命名文件
批量重命名CSV文件的Unix实操方案
方法1:用Perl版rename命令(便捷首选)
大部分Linux发行版默认预装这个版本的rename,一行命令搞定:
rename 's/^([^-]+)-.*\.csv$/$1.csv/' *.csv
命令拆解:
s/旧匹配规则/新命名规则/:Perl的字符串替换语法^([^-]+):精准捕获文件名开头到第一个-之前的所有字符(这部分会被保存为分组$1)-.*\.csv$:匹配第一个-到.csv结尾的全部冗余内容$1.csv:用捕获的核心文件名加上.csv后缀作为新名称
方法2:原生Bash循环(全兼容方案)
如果你的系统没有Perl版rename,用原生Bash循环也能实现,适配所有Unix-like系统:
for file in *.csv; do new_name="${file%%-*}.csv" mv "$file" "$new_name" done
命令拆解:
${file%%-*}:Bash参数扩展语法,从文件名末尾开始删除最长的-*匹配段,最终保留第一个-之前的内容mv "$file" "$new_name":执行实际的重命名操作
安全提示
- 先把
mv换成echo运行,预览生成的新文件名,确认无误后再执行重命名 - 如果文件夹里有不符合格式的CSV文件,可先通过
ls | grep '^.*-.*\.csv$'筛选出目标文件,再执行重命名
内容的提问来源于stack exchange,提问作者Sumit Das
相关产品推荐
相关产品推荐

