Linux下批量修改文件名(rename)
rename - 用字符串替换的方式批量改变文件名 (**)
rename支持正则表达式
字母的替换
rename "s/AA/aa/" * # 把文件名中的AA替换成aa //此命令,只能修改当前目录下所有的文件
Linux下批量修改文件名方法 方法一:mv配合for循环方式进行修改
=====================
rename - 用字符串替换的方式批量改变文件名 (**)
用字符串替换的方式批量改变文件名
补充说明
rename命令 用字符串替换的方式批量改变文件名。
语法
rename(参数)
参数
原字符串:将文件名需要替换的字符串;
目标字符串:将文件名中含有的原字符替换成目标字符串;
文件:指定要改变文件名的文件列表。
实例
将main1.c重命名为main.c
rename main1.c main.c main1.c
rename支持通配符
? 可替代单个字符
* 可替代多个字符
[charset] 可替代charset集中的任意单个字符
文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278
如果使用rename foo foo0 foo?
,会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。
如果使用rename foo foo0 foo??
,foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。
如果使用rename foo foo0 foo*
,foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。
如果使用rename foo0 foo foo0[2]*
,从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。
rename支持正则表达式
字母的替换
rename "s/AA/aa/" * # 把文件名中的AA替换成aa
rename "s/AA/aa/" * # 把文件名中的AA替换成aa。注意:最后还有空格、加一个星号
修改文件的后缀
rename "s//.html//.php/" * # 把.html 后缀的改成 .php后缀
批量添加文件后缀
rename "s/$//.txt/" * # 把所有的文件名都以txt结尾
批量删除文件名
rename "s//.txt//" * # 把所有以.txt结尾的文件名的.txt删掉
=============
Linux下批量修改文件名(rename)
https://blog.csdn.net/sea_shore/article/details/6102437
1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修改文件名, 不过rename实在太方便了
比如把所有的表为cdb1_* 修改为cdb_*的
在本目录下
只需要# rename 'cdb1' 'cdb' *
以前都是写个for循环来做...想想多傻啊, 呵呵
rename还有更多的功能, 建议man rename下
From:http://www.hao32.com/unix-linux/42.html
2.批量更改文件名 rename
通过 man rename 命令可以得知,rename 命令其实是一个 Perl 脚本命令,
它专用于批量地给多文件重命名(rename multiple files)。
命令格式:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
perlexpr 是一种 Perl 脚本格式的正则表达式。
参数:
-v, --verbose
Verbose: print names of files successfully renamed.
详细模式:打印成功更改的文件名列表
-n, --no-act
No Action: show what files would have been renamed.
测试模式:并不真正的执行命令,而只是显示哪些文件名应该怎么进行
更改,用于测试模式。
-f, --force
Force: overwrite existing files.
强制模式:在更改文件名,如果更改后的文件已经存在时覆盖已经存在
的文件。
rename 的典型应用:
0. 批量更改文件扩展名
$ ls
1.txt 2.txt 3.txt 4.txt
$ rename 's//.txt//.ext/' *
$ ls
1.ext 2.ext 3.ext 4.ext
1. 批量删除文件扩展名
$ ls
1.txt 2.txt 3.txt 4.txt
$ rename 's//.txt//' *
$ ls
1 2 3 4
2. 批量添加文件扩展名
$ ls
1 2 3 4
$ rename 's/$//.txt/' *
$ ls
1.txt 2.txt 3.txt 4.txt
3. 按自己的方式批量重命名文件
$ ls
1.ext 2.ext 3.ext 4.ext
$ rename 's/(/d)/第$1 章/' *
$ ls
第 1 章.ext 第 2 章.ext 第 3 章.ext 第 4 章.ext
3.
方法1:把文件名拆分处理,可以任意修改文件名
find -name '*.log' -printf %f//n|awk -F'.' '{print $1}'|xargs -i{} mv {}.log xiyun_{}.log
方法2:利用rename
一般的linux下的rename命令比较简单
rename 'test' 'xiyun' '*.log'
把文件名中的某部分字符串替换掉
ubuntu下的rename命令支持正则表达式,因此功能更强大。
方法3:直接利用find和xargs和mv,中间不用awk,这样只能添加后缀名,不能修改文件名。
From:http://blog.chinaunix.net/u/22583/showart_1964649.html
Linux下批量修改文件名方法
对于在Linux中修改文件名的方式一般我们会用mv命令进行修改,但是mv命令是无法处理大量文件修改名称。
但是在处理大量文件的时候该如何进行批量修改呢?
方法一:mv配合for循环方式进行修改
[root@show day74]# for name in `ls *.html`;do echo $name ${name%.html}.jpg;done 00.html 00.jpg 01.html 01.jpg 02.html 02.jpg 03.html 03.jpg 04.html 04.jpg 05.html 05.jpg 06.html 06.jpg 07.html 07.jpg 08.html 08.jpg 09.html 09.jpg 10.html 10.jpg [root@show day74]# for name in `ls *.html`;do mv $name ${name%.html}.jpg;done [root@show day74]# ls 00.jpg 01.jpg 02.jpg 03.jpg 04.jpg 05.jpg 06.jpg 07.jpg 08.jpg 09.jpg 10.jpg
方法二:sed命令
ls *jpg|sed -r 's#(.*).jpg#mv & \1.mp4#'|bash
方法三:rename命令
rename命令用字符串替换的方式批量改变文件名。
格式:rename 原名 替换名 要改的文件
原字符串:将文件名需要替换的字符串; 目标字符串:将文件名中含有的原字符替换成目标字符串; 文件:指定要改变文件名的文件列表。
[root@cache01 test]# ls 01.txt 03.txt 05.txt 07.txt 09.txt 02.txt 04.txt 06.txt 08.txt 10.txt [root@cache01 test]# rename txt jpg * [root@cache01 test]# ls 01.jpg 03.jpg 05.jpg 07.jpg 09.jpg 02.jpg 04.jpg 06.jpg 08.jpg 10.jpg