服务器上一批图片叫 IMG_001.JPG 到 IMG_120.JPG,要统一改成小写加前缀,一个个敲 mv 太慢。linux修改文件名主要就两条路:单个用 mv,批量用 rename 或者 for 循环。目录下还有子目录的话,find 加 -exec 也能干,但影响范围大,先把路径确认清楚。
单个文件直接 mv
mv old.txt new.txt,同目录下就是改名,目标路径不同就是移动顺便改名。加 -i 参数覆盖前会问一句,能防手滑。文件被进程占用时多数情况也能改成功,但程序还拿着旧句柄,日志可能继续写进旧文件名。
rename 一条命令改一批
Debian 和 Ubuntu 上的 rename 是 Perl 版本,写法是 rename 's/IMG_/photo_/' *.JPG,把所有 IMG_ 开头替换成 photo_。CentOS 上同名工具语法不一样,是 rename IMG_ photo_ *.JPG 这种三个参数的用法,跑之前先用 -n 试一遍。
没有 rename 就写 for 循环
用参数扩展拼新名字,把扩展名统一改成小写:
for f in *.JPG; do mv $f ${f%.JPG}.jpg; done${f%.JPG} 是去掉后缀,百分号写在花括号里面。文件名带空格的话,变量外面要自己加引号,否则会被拆成两个参数。循环里先 echo 一遍再执行,是最省事的检查方式。
给所有文件加统一前缀也不用写脚本:rename 's/^/bak_/' *,^ 表示开头,改完用 ls -l 核对数量和名字。
动手前先做两件事
先 ls 看一眼匹配范围,再拿一两个文件试跑。批量改名不可逆,重要目录先 tar 打包留底。系统目录里的文件,先确认没有被服务引用,改完记得把配置里的路径一起更新。
选法很简单:改一个用 mv,改一批用 rename,环境里没有 rename 就 for 循环加参数扩展。linux修改文件名这件事,三条路子覆盖九成场景。改完别急着关终端,用 ls 对比一遍,确认无误再删备份。改名前后的旧名字记一下,配置里用 grep -r 搜一遍,能省不少排查时间。