Linux常用命令学习笔记:rename

1. 命令概述

  • 命令名称rename
  • 核心功能:批量重命名文件
  • 主要用途:批量修改文件名、文件扩展名、文件格式转换

2. 语法格式

# Perl 版本(推荐)
rename 's/原字符串/新字符串/' 文件...

# 简单版本(某些系统)
rename 原字符串 新字符串 文件...

3. 常用实例详解

(1) 基本用法

# 将文件中的 "old" 替换为 "new"
rename 's/old/new/' *.txt

# 将文件扩展名从 .txt 改为 .md
rename 's/\.txt$/\.md/' *.txt

# 在文件名前添加前缀
rename 's/^/prefix_/' *.txt

# 在文件名后添加后缀
rename 's/$/_suffix/' *.txt

(2) 大小写转换

# 将所有文件名转为小写
rename 'y/A-Z/a-z/' *

# 将所有文件名转为大写
rename 'y/a-z/A-Z/' *

# 将首字母大写
rename 's/\b(\w)/\u$1/g' *

(3) 删除字符

# 删除文件名中的空格
rename 's/ //g' *

# 删除文件名中的数字
rename 's/[0-9]//g' *

# 删除指定字符串
rename 's/old//' *.txt

(4) 复杂替换

# 替换多个字符
rename 's/old1/new1/; s/old2/new2/' *.txt

# 使用正则表达式
rename 's/[^a-zA-Z0-9._-]//g' *  # 删除非法字符

# 保留数字和字母
rename 's/[^a-zA-Z0-9]//g' *

4. 实际应用场景

场景一:批量修改扩展名

# 将 .jpg 改为 .png
rename 's/\.jpg$/\.png/' *.jpg

# 将 .txt 改为 .md
rename 's/\.txt$/\.md/' *.txt

# 将 .log 改为 .txt
rename 's/\.log$/\.txt/' *.log

场景二:添加前缀后缀

# 为所有图片添加日期前缀
rename 's/^/20231218_/' *.jpg

# 为所有文件添加备份后缀
rename 's/$/_backup/' *

# 为特定文件添加版本号
rename 's/(.*)\.txt/$1_v1.txt/' *.txt

场景三:整理文件名

# 删除文件名中的空格
rename 's/ //g' *

# 删除文件名中的特殊字符
rename 's/[^a-zA-Z0-9._-]//g' *

# 统一文件名格式
rename 's/^.*$/\L$&/' *  # 全部小写
rename 's/^.*$/\U$&/' *  # 全部大写

场景四:数字序列化

# 为文件添加序号
ls | cat -n | while read n f; do mv "$f" "$(printf "%03d_%s" $n "$f")"; done

# 批量重命名图片为序列号
ls *.jpg | cat -n | while read n f; do mv "$f" "$(printf "image_%03d.jpg" $n)"; done

# 批量重命名日志文件
ls *.log | cat -n | while read n f; do mv "$f" "$(printf "log_%04d.log" $n)"; done

5. 注意事项

  1. 版本差异:不同 Linux 发行版的 rename 命令语法可能不同
  2. 测试模式:建议先使用 -n 选项测试,确认无误后再执行
  3. 备份文件:重要文件操作前建议先备份
  4. 正则表达式:熟练掌握正则表达式可以更灵活地批量重命名
  5. 权限问题:重命名文件需要目录的写权限

6. 常见问题解决

(1) 命令不存在

# 安装 Perl 版本的 rename
sudo apt-get install rename  # Ubuntu/Debian
sudo yum install prename     # CentOS/RHEL

(2) 测试重命名

# 使用 -n 选项测试,不实际执行
rename -n 's/old/new/' *.txt

# 使用 -v 选项显示详细信息
rename -v 's/old/new/' *.txt

(3) 特殊字符处理

# 处理文件名中的空格
rename 's/ /_/g' *  # 将空格替换为下划线

# 处理文件名中的点号
rename 's/\.(?=.*\.)/_/g' *  # 将中间的点号替换为下划线

# 处理文件名中的括号
rename 's/[()]//g' *  # 删除括号

(4) 批量操作

# 批量重命名当前目录及子目录下的文件
find . -name "*.txt" -exec rename 's/old/new/' {} \;

# 批量修改扩展名
find . -name "*.jpg" -exec rename 's/\.jpg$/\.png/' {} \;

# 批量添加前缀
find . -name "*.log" -exec rename 's/^/backup_/' {} \;

核心要点总结

  • rename 命令用于批量重命名文件,支持正则表达式
  • 语法格式rename 's/原字符串/新字符串/' 文件...
  • 常用操作:替换字符串、修改扩展名、添加前缀后缀、大小写转换
  • 实际应用:批量修改文件名、整理文件格式、文件序列化
  • 注意事项:不同系统版本语法可能不同,建议先测试再执行
  • 安全操作:使用 -n 选项测试,重要文件先备份

rename 命令是文件管理的实用工具,熟练掌握可以大大提高文件整理效率。


作 者:南烛
链 接:https://www.itnotes.top/archives/319
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇