Linux批量修改文件名保留部分技巧,三种方法轻松搞定局部调整,高效Linux文件名局部修改,三招轻松实现批量操作
(拍大腿)各位老铁们!今天咱们来唠唠Linux里那个让人又爱又恨的操作——批量改文件名还要保留部分内容。就像给一百个娃改名字,既要保留姓氏又要换辈分,这事儿咋整?别慌,三大绝活包教包会!
一、基础操作:mv命令玩转局部修改
举个栗子,手头有100个"2025报告_张三.docx"文件,想批量去掉下划线保留人名。用这个命令就能搞定:
bash复制for file in *.docx; do mv "$file" "${file//_/ }"; done
重点解析:
${file//_/ }
:这个魔法参数能把文件名里所有下划线替换成空格- 保留数字部分:
${file:0:4}
能提取前4位,适合处理带年份的文件名
要是想给所有图片加日期前缀,试试这个:
bash复制for img in *.jpg; do mv "$img" "20250430_$img"; done
(挠头)可能有兄弟问:"万一文件名里有空格咋办?"这时候记得给变量加引号,写成"$file"
就不会 ***
二、进阶神器:rename命令精准手术刀
遇到要保留中间某段内容时,就得请出正则表达式大佬了。比如把"产品A-规格123-库存50.txt"改成"规格123_库存50.txt":
bash复制rename 's/产品A-//' *.txt
三大实用场景:
- 保留数字序列:
rename 's/[^0-9]*//g' *
能删除非数字字符 - 保留后缀名前缀:
rename 's/(.*)\.txt/$1_backup.doc/' *.txt
转换格式同时保留主名 - 复杂替换:
rename 's/(2024)(.*)/$2_$1/' *
把开头的年份移到末尾
(扶眼镜)注意啦!部分系统要安装rename
命令,Ubuntu用sudo apt install rename
,CentOS用yum install prename
三、终极大招:find+sed组合拳
当文件分散在不同文件夹时,这个组合能横扫千。比如要把所有子目录里的"草案_"开头的文件改成"终版_":
bash复制find . -name "草案_*" -exec bash -c 'mv "$0" "${0/草案_/终版_}"' {} \;
高阶技巧:
- 保留特定字符:用
sed 's/[^a-zA-Z]//g'
过滤非字母字符 - 批量编号:结合
printf
实现自动编号:
bash复制count=1; for file in *.mp4; do mv "$file" "视频_$(printf "%03d" $count).mp4"; ((count++)); done
(敲黑板)重要提醒!操作前建议先加-n
参数测试,比如rename -n 's/old/new/' *
能预览修改效果不执行
方法对比表
方法 | 适用场景 | 优势 | 注意事项 |
---|---|---|---|
mv循环 | 简单增删改 | 无需安装新工具 | 处理复杂规则吃力 |
rename | 正则表达式复杂替换 | 一行命令搞定 | 语法因系统而异 |
find+sed | 多级目录批量操作 | 支持过滤文件类型 | 命令结构较复杂 |
个人观点时间
实测这些年,给各位萌新划个重点:
- 新手首选mv循环,虽然写着麻烦但最不容易翻车
- 正则苦手用mmv,像
mmv "2025*" "2026#1"
这种直观操作更友好 - 重要文件先备份,别问我怎么知道的(都是泪)
未来可能会出智能重命名工具,但现在这三大招足够应付90%的日常需求。记住,批量操作就像炒菜,火候到了自然香,千万别贪快把锅烧糊喽!