关于在Linux中如何bat 批量修改文件名名

在Linux中,当你想要改变一个文件名,使用mv命令就好了。然而mv不能使用通配符重命名多个文件。可以用sed、awk或者与xargs结合使用来处理多个文件的情况。然而,这些命令行即繁琐又不友好,并且如果不小心的话还很容易出错。你不会想要撤销1000个文件的错误名吧!
当你想要重命名多个文件的时候,rename 工具或许是最简单、最安全和最强大的命令行工具。这个rename命令实际上是一个Perl脚本,它预安装在所有的现在Linux发行版上。
下面是重命名命令的基本语法。
rename [-v -n -f]
是Perl兼容正则表达式,它表示的是要重命名的文件和该怎么做。正则表达式的形式是‘s/old-name/new-name/’。
‘-v’选项会显示文件名改变的细节(比如:XXX重命名成YYY)。
‘-n’选项告诉rename命令在不实际改变名称的情况下显示文件将会重命名的情况。这个选项在你想要在不改变文件名的情况下模拟改变文件名的情况下很有用。
‘-f’选项强制覆盖存在的文件。
下面,就让我们看下rename命令的几个实际例子。
改变文件扩展名
假设你有许多.jpeg的图片文件。你想要把它们的名字改成.jpg。下面的命令就会将.jpeg 文件改成 *.jpg。
$ rename 's//.jpeg$//.jpg/' *.jpeg
大写改成小写,反之亦然
有时你想要改变文件名的大小写,你可以使用下面的命令。
把所有的文件改成小写:
# rename 'y/A-Z/a-z/' *
把所有的文件改成大写:
# rename 'y/a-z/A-Z/' *
更改文件名模式
现在让我们考虑更复杂的包含子模式的正则表达式。在PCRE中,子模式包含在圆括号中,$符后接上数字(比如$1,$2)。
比如,下面的命令会将‘imgNNNN.jpeg’变成‘danNNNN.jpg’。
# rename -v 's/img_(/d{4})/.jpeg$/dan_$1/.jpg/' *.jpeg
img_5417.jpeg renamed as dan_5417.jpg
img_5418.jpeg renamed as dan_5418.jpg
img_5419.jpeg renamed as dan_5419.jpg
img_5420.jpeg renamed as dan_5420.jpg
img_5421.jpeg renamed as dan_5421.jpg
比如,下面的命令会将‘img_000NNNN.jpeg’变成‘dan_NNNN.jpg’。
# rename -v 's/img_/d{3}(/d{4})/.jpeg$/dan_$1/.jpg/' *jpeg
img_0005417.jpeg renamed as dan_5417.jpg
img_0005418.jpeg renamed as dan_5418.jpg
img_0005419.jpeg renamed as dan_5419.jpg
img_0005420.jpeg renamed as dan_5420.jpg
img_0005421.jpeg renamed as dan_5421.jpg
上面的例子中,子模式‘/d{4}’会捕捉4个连续的数字,捕捉的四个数字就是$1, 将会用于新的文件名。用户名:老男孩oldboy
文章数:567
评论数:7194
访问量:5417633
注册日期:
阅读量:1297
阅读量:3317
阅读量:582234
阅读量:466916
51CTO推荐博文
#########################################################
#linux下批量修改文件名精彩解答案例分享
#date:21:34
#作者:老男孩 创办了《老男孩linux实战培训》为广大linux爱好者提供服务。
#QQ: MAIL:
#QQ交流群:&&&
#psite: (即将开放)
#pblog:http://etiantian.org
##########################################################
问题:见一兄弟的需求,下面我截的图。
特别说明下,有的兄弟很细心,上面截图中说的是去掉_finished我的解答是针对去掉finished的,不过不影响大局,特请大家注意下。
[root@oldboy oldboy]#ls -l
-rw-r--r-- 1 root root 114 Nov 14 00:21 change_file_name.sh
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__finished.jpg
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__finished.jpg
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__finished.jpg
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__finished.jpg
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__finished.jpg
[root@oldboy oldboy]#cat change_file_name.sh
# oldboy QQ:
for file in `ls ./*.jpg`
/bin/mv $file `echo &${file%finished*}.jpg&`& #这里就是变量的截取新方法,在老男孩的shell编程课程中会讲到此用法。
[root@oldboy oldboy]#sh change_file_name.sh
[root@oldboy oldboy]#ls -l
-rw-r--r-- 1 root root 114 Nov 14 00:21 change_file_name.sh
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__.jpg
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__.jpg
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__.jpg
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__.jpg
-rw-r--r-- 1 root root&& 0 Nov 14 00:23 stu__.jpg
特别提示:本脚本和文件在同一目录
[root@oldboy oldboy]# ll
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__finished.jpg
[root@oldboy oldboy]# ls |awk -F 'finished' '{print& $0}'
stu__finished.jpg
stu__finished.jpg
stu__finished.jpg
stu__finished.jpg
stu__finished.jpg
[root@oldboy oldboy]# ls |awk -F 'finished' '{print& $1}'
[root@oldboy oldboy]# ls |awk -F 'finished' '{print& $2}'
[root@oldboy oldboy]# ls |awk -F 'finished' '{print& $1$2}'
[root@oldboy oldboy]# ls |awk -F 'finished' '{print &mv &$0& &$1$2& &}'|/bin/bash
[root@oldboy oldboy]# ll
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu__.jpg
方法四:通过专业的改名命令rename实现
[root@oldboy oldboy]# ll
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__finished.jpg
[root@oldboy oldboy]# rename &finished& &&& * ==&执行批量改名
[root@oldboy oldboy]# ll
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.jpg
拓展下:改扩展名的方法
[root@oldboy oldboy]# rename .jpg .oldboy *
[root@oldboy oldboy]# ll
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.oldboy
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.oldboy
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.oldboy
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.oldboy
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu__.oldboy
特别提示:如果大家有需要解答问题可以,blog留言给我。我们互相交流,共同切磋,共同进步。
兄弟们啊,这个问题并不重要,解答问题的思路才是最重要的。本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
本文收录至博客专题:《》
11:17:23 14:51:46 16:46:09 14:14:13 16:14:16 16:44:02 15:02:18 12:23:32 12:23:42 12:23:54 &&1&
&&页数 ( 1/2 ) &随笔 - 849&
文章 - 11&评论 - 191&trackbacks - 0
原文地址:&http://blog.csdn.net/sea_shore/article/details/6102437
1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修改文件名, 不过rename实在太方便了
比如把所有的表为cdb1_* 修改为cdb_*的在本目录下只需要# rename 'cdb1' 'cdb' *
以前都是写个for循环来做...想想多傻啊, 呵呵
rename还有更多的功能, 建议man rename下
From:/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
阅读(...) 评论()}

我要回帖

更多关于 win7 批量修改文件名 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信