Linux 中好用的 rename 命令

Linux 中的 rename 命令,通常指的是 prename (Perl rename) 或者 rename.ul 命令,其主要作用是批量重命名文件。 它可以根据用户指定的规则,使用 Perl 正则表达式对文件名进行修改。

主要作用:

  • 批量重命名: rename 命令可以一次性重命名多个文件,而无需手动逐个修改。
  • 正则表达式支持: rename 命令使用 Perl 正则表达式来定义重命名规则,这使得它可以执行非常灵活和强大的文件名修改操作。
  • 自动化: rename 命令可以用于自动化文件重命名任务,例如在脚本中根据特定的模式修改文件名。

语法:

rename 's/old_pattern/new_pattern/g' files
  • rename: 调用 rename 命令 (可能是 prenamerename.ul)。
  • 's/old_pattern/new_pattern/g': Perl 正则表达式替换命令。
    • s/: 表示替换操作。
    • old_pattern: 要匹配的正则表达式。
    • new_pattern: 要替换为的字符串。
    • g: 全局替换。 替换所有匹配项,而不仅仅是第一个。
  • files: 要重命名的文件列表。 可以使用通配符 (例如 *, ?) 来匹配多个文件。

常用示例:

  1. 将所有 .txt 文件重命名为 .log 文件:

    rename 's/\.txt$/.log/' *.txt
    
  2. 将所有文件名中的空格替换为下划线:

    rename 's/ /_/g' *
    
  3. 将所有文件名转换为小写:

    rename 'y/A-Z/a-z/' *
    
  4. 删除文件名中的前缀 old_

    rename 's/^old_//' *
    
  5. 将所有文件名中的 file 替换为 document

    rename 's/file/document/g' *
    
  6. 将所有文件名中的 [xxx] 替换为空字符串(包括方括号):

    rename 's/\[[^\]]*\]//g' *
    

关键概念:

  • Perl 正则表达式: rename 命令的核心是 Perl 正则表达式。 掌握正则表达式对于有效地使用 rename 命令至关重要。 正则表达式是一种强大的模式匹配语言,可以用于描述各种文本模式。
  • 全局替换: g 标志表示全局替换。 如果省略 g 标志,则只会替换第一个匹配项。
  • 通配符: 通配符 (例如 *, ?) 可用于匹配多个文件。 * 匹配零个或多个字符,? 匹配单个字符。

与其他 rename 命令的区别:

需要注意的是,Linux 系统中可能存在其他名为 rename 的命令,它们的功能和语法可能有所不同。 例如,util-linux 包中也包含一个 rename 命令,但它的语法与 prename 不同。

  • prename (Perl rename): 使用 Perl 正则表达式进行重命名,功能强大且灵活。
  • rename.ul 通常是指向 prename 的符号链接。
  • rename (util-linux): 使用简单的字符串替换进行重命名,功能相对有限。

要确定你系统上 rename 命令的具体类型,可以使用以下命令:

which rename
man rename

风险和注意事项:

  • 数据丢失: rename 命令会永久更改文件名,如果使用不当,可能会导致数据丢失。 强烈建议在运行 rename 命令之前备份你的文件。
  • 测试: 在实际运行之前,先在一个包含少量测试文件的目录中运行该命令,以确保它按预期工作。
  • 正则表达式错误: 错误的正则表达式可能会导致意外的文件名
1 个赞

:+1: