rename和prename批量重命名

rename介绍

[kuangzm@kuang test]$ rename --help

用法:
rename [选项] 表达式 替换文件...

选项:
-v, --verbose 解释正在进行的操作
-s, --symlink 在符号链接上执行

-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出

使用案例:

1.将所有jpg替换为jpg0

[kuangzm@kuang test]$ touch jpg{1..3}.txt
[kuangzm@kuang test]$ ll
总用量 0
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg1.txt
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg2.txt
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg3.txt
[kuangzm@kuang test]$ rename jpg jpg0 *.txt
[kuangzm@kuang test]$ ll
总用量 0
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg01.txt
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg02.txt
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg03.txt

2.将所有后缀.txt替换成.md

[kuangzm@kuang test]$ rename .txt .md *.txt
[kuangzm@kuang test]$ ll
总用量 0
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg01.md
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg02.md
-rw-rw-r-- 1 kuangzm kuangzm 0 5月  10 17:43 jpg03.md

prename支持通配符

Perl的rename来替换文件名中的部分字符串

prename帮助

用法:prename [选项]... PERLEXPR 文件...
使用 PERLEXPR 对每个文件名进行重命名。

  -b, --backup                  删除之前创建备份
  -B, --prefix=SUFFIX           设置备份文件名前缀
  -f, --force                   删除现有的目标文件,不提示
  -i, --interactive             在覆盖之前提示
  -l, --link-only               仅创建链接而不是重命名
  -n, --just-print, --dry-run   不执行重命名,显示操作结果
  -v, --verbose                 显示正在执行的操作
  -V, --version-control=METHOD  覆盖默认的版本控制
  -Y, --basename-prefix=PREFIX  设置备份文件名的基本文件名前缀
  -z, -S, --suffix=SUFFIX       设置备份文件名后缀
      --help                    显示帮助信息并退出
      --version                 显示版本信息并退出

默认的备份后缀是 ~,除非使用 SIMPLE_BACKUP_SUFFIX 进行设置。版本控制可以使用 VERSION_CONTROL 进行设置,可能的值有:

  numbered, t     创建带编号的备份
  existing, nil   如果已存在带编号的备份则使用,否则使用简单备份
  simple, never   总是创建简单备份

报告错误至 pederst@cpan.org

正则表达式


^:表示匹配行的开头。
$:表示匹配行的结尾。
.:匹配除换行符之外的任何单个字符。
*:匹配前一个元素零次或多次。
+:匹配前一个元素一次或多次。
?:匹配前一个元素零次或一次,也用于非贪婪匹配。
[]:用于指定字符集,匹配其中的任意一个字符。
():用于捕获分组,可以对匹配的子字符串进行提取或后续操作。
\:转义字符,用于取消特殊字符的特殊意义。
|:逻辑或操作符,匹配其左右任一侧的表达式。
{}:用于指定前一个元素的重复次数范围:匹配由任何3个数字组成的字符串,'s/\d{3}/replacement/'
\d:匹配任意一个数字字符。等价于 [0-9]。
\s:匹配任意一个空白字符,包括空格、制表符、换行符等。
\w:匹配任意一个单词字符,包括字母、数字和下划线。

`s `操作符:s 操作符用于在字符串中进行替换操作。它的语法是 s/模式/替换字符串/。当在文件名中使用时,prename 命令中的 s 表示替换操作符。
`g `修饰符:g 是替换操作的修饰符之一,表示全局匹配。如果省略了 g 修饰符,替换操作只会影响到匹配到的第一个实例。而如果包含了 g 修饰符,替换操作会影响到所有匹配的实例。在 prename 中,g 修饰符表示替换所有匹配项。
`y` 操作符:y 操作符用于字符转换。它的语法是 y/源字符/目标字符/,将字符串中的所有源字符替换为对应的目标字符。在 prename 中,y 操作符通常用于将字符转换为小写或大写。

安装prename

yum install prename

使用案例

1.替换文件名中的字符串:将文件名中的某个字符串替换为另一个字符串

prename 's/old_string/new_string/' *

2.添加前缀或后缀:在文件名的开头或结尾添加一些额外的文本。

添加前缀

prename 's/^/prefix_/' *

添加后缀

prename 's/$/_suffix/' *

3.删除指定的字符或字符串:从文件名中删除指定的字符或字符串

prename 's/unwanted_string//' *

4.转换大小写:将文件名中的字符转换为大写或小写

转换为大写

prename 'y/a-z/A-Z/' *

转换为小写

prename 'y/A-Z/a-z/' *

5.移除文件名中的数字:删除文件名中的所有数字

prename 's/\d+//' *

6.删除文件名中的特定文件扩展名:删除文件名中的特定文件扩展名。

#$是表示txt结尾的
prename 's/\.txt$//' *.txt

7.批量重命名文件以按顺序编号:给文件名添加连续的编号

[root@kuang test]# touch a{a..c}.txt
[root@kuang test]# ll
总用量 0
-rw-r--r-- 1 root root 0 5月  10 19:08 aa.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 ab.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 ac.txt
[root@kuang test]# prename 'our $i; $i++; $_ = "jpg_$i.txt"' *
[root@kuang test]# ll
总用量 0
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_1.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_2.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_3.txt

8.替换特定位置的字符串:替换文件名中特定位置的字符串

prename 's/(.*)_old_(.*)/$1_new_$2/' *
#示例
[root@kuang test]# touch file{1..3}_old_suffix.txt
[root@kuang test]# ll
总用量 0
-rw-r--r-- 1 root root 0 5月  10 19:12 file1_old_suffix.txt
-rw-r--r-- 1 root root 0 5月  10 19:12 file2_old_suffix.txt
-rw-r--r-- 1 root root 0 5月  10 19:12 file3_old_suffix.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_1.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_2.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_3.txt
[root@kuang test]# prename 's/(.*)_old_(.*)/$1_new_$2/' *
[root@kuang test]# ll
总用量 0
-rw-r--r-- 1 root root 0 5月  10 19:12 file1_new_suffix.txt
-rw-r--r-- 1 root root 0 5月  10 19:12 file2_new_suffix.txt
-rw-r--r-- 1 root root 0 5月  10 19:12 file3_new_suffix.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_1.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_2.txt
-rw-r--r-- 1 root root 0 5月  10 19:08 jpg_3.txt

9.在文件名中插入字符:在文件名中的特定位置插入字符

prename 's/(.{3})(.*)/$1_inserted_text_$2/' *

10.批量删除文件名中的空格:删除文件名中的所有空格。

prename 's/\s+//g' *
posted @ 2024-05-10 19:36  KuangZhuMing2  阅读(182)  评论(0)    收藏  举报