查看/home下所有子目录的ok.txt并修改成OK.txt
find/home-type f -name "ok.txt" -execrename 'ok.txt' 'OK.txt' {} ;
linux 批量重名名Linux Shell批量重命名的方法总览
1、删除所有的 .bak 后缀:
rename 's/.bak$//'*.bak
2、把 .jpe 文件后缀修改为 .jpg:
rename's/.jpe$/.jpg/' *.jpe
3、把所有文件的文件名改为小写:
rename'y/A-Z/a-z/' *
4、将 abcd.jpg 重命名为 abcd_efg.jpg:
for var in*.jpg; do mv "$var" "${var%.jpg}_efg.jpg"; done
5、将 abcd_efg.jpg 重命名为 abcd_lmn.jpg:
for var in*.jpg; do mv "$var" "${var%_efg.jpg}_lmn.jpg";done
6、把文件名中所有小写字母改为大写字母:
for var in`ls`; do mv -f "$var" `echo "$var" |tr a-z A-Z`;done
7、把格式 *_?.jpg 的文件改为 *_0?.jpg:
for var in`ls *_?.jpg`; do mv "$var" `echo "$var" |awk -F '_' '{print $1 "_0"$2}'`; done
8、把文件名的前三个字母变为 vzomik:
for var in`ls`; do mv -f "$var" `echo "$var" |sed 's/^.../vzomik/'`;done
9、把文件名的后四个字母变为 vzomik:
for var in`ls`; do mv -f "$var" `echo "$var" |sed 's/....$/vzomik/'`;done
linux下批量修改文件名
0、问题来源,想把一部分文件加上日期序。也就是在文件名称前加上当前的年月日进行输出。
获取日期格式如下
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$date+%Y%m%d
20091112
1、使用find、awk/grep/sed、mv等命令组--合来实现
Ubuntu下
利用awk命令进行制作,操作如下
1)找到需要进行操作的文件名
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$find-name‘*.jpg’-printf%f//n|grep-v^[0-9]|grep-vlogo.jpg
se_platform.jpg
soa1.jpg
soa4.jpg
java_primitive_data_type.jpg
soa3.jpg
soa2.jpg
2)提取文件名,保持文件扩展名不变
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$find-name‘*.jpg’-printf%f//n|grep-v^[0-9]|grep-vlogo.jpg|awk-F‘.’‘{print$1}’
se_platform
soa1
soa4
java_primitive_data_type
soa3
soa2
3)对文件进行批量替换操作
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$find-name‘*.jpg’-printf%f//n|grep-v^[0-9]|grep-vlogo.jpg|awk-F‘.’‘{print$1}’|
xargs-i{}mv{}.jpg`date+%Y%m%d`{}.jpg
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ls
20090818a.jpg20090919twitter4.jpg
20090818learn.jpg20091110open_project.jpg
20090819java1.png20091112java_primitive_data_type.jpg
20090819javaseplatformroadmap.gif20091112se_platform.jpg
20090916neiji.jpg20091112soa1.jpg
20090916waiji.jpg20091112soa2.jpg
20090919photo.jpg20091112soa3.jpg
20090919twitter.jpg20091112soa4.jpg
20090919twitter2.jpglogo.jpg
20090919twitter3.jpg
利用nawk命令进行制作,操作如下
1)找到要操作的文件名
Zianed@ubuntu:~/sedcommand$find./-typef|grep“log”|sed-n’s//.////p’
test2.log
test1.log
2)进行文件名更改操作
Zianed@ubuntu:~/sedcommand$ls*.log
test1.logtest2.log
Zianed@ubuntu:~/sedcommand$find./-typef|grep“log”|sed-n’s/.////p’|
nawk‘{oldname=$1;$2=`date+%Y%m%d`$1;newname=$1;print“mv”oldname””newname}’|/bin/sh
nawk:warning:escapesequence`/.’treatedasplain`.’
Zianed@ubuntu:~/sedcommand$ls*.log
test1_test.logtest2_test.log
Zianed@ubuntu:~/sedcommand$
利用sed命令进行制作,操作如下
find/-typef-name“*.sql”|seds//(.*/)/.sql/mv&/1.pls/’|sh
2、编写Shell脚本运行
保存为一个Shell脚本
#!/bin/bash
#script_name:rename_ALL
find./-typef|grep“txt”|sed-n’s//.////p’|nawk‘{oldname=$1;
sub(//./,”_test/.”);
newname=$1;
print“mv”oldname””newname}’|/bin/sh
将上述代码保存为文件rename_ALL
修改脚本的属性,使它能执行:chmodu+xrename_ALL
执行:./rename_ALL
来自网络
看起来很管用,要是能够进行将要改的文件名格式传递进去就更好了。
3、使用rename命令
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$rename–help
Unknownoption:help
Usage:rename[-v][-n][-f]perlexpr[filenames]
manrename发现,
“rename”renamesthefilenamessuppliedaccordingtotherulespecifiedasthefirstargument.
TheperlexprargumentisaPerlexpressionwhichisexpectedtomodifythe$_stringinPerlforatleastsomeofthefilenamesspecified.Ifagivenfilenameisnotmodifiedbytheexpression,itwillnotberenamed.Ifnofilenamesaregivenonthecommandline,filenameswillbereadviastandardinput.
Forexample,torenameallfilesmatching“*.bak”tostriptheextension,youmightsay
rename’s//.bak$//’*.bak
Totranslateuppercasenamestolower,you’duse
rename‘y/A-Z/a-z/’*
命令格式:
rename[-v][-n][-f]perlexpr[files]
perlexpr是一种Perl脚本格式的正则表达式。
files文件名通配符
参数:
-v,–verbose
Verbose:printnamesoffilessuccessfullyrenamed.
详细模式:打印成功更改的文件名列表
-n,–no-act
NoAction:showwhatfileswouldhavebeenrenamed.
测试模式:并不真正的执行命令,而只是显示哪些文件名应该怎么进行更改,用于测试模式。
-f,–force
Force:overwriteexistingfiles.
强制模式:在更改文件名,如果更改后的文件已经存在时覆盖已经存在的文件。
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ls
20090819java1.png200909v9twitter4.jpg
20090819javaseplatformroadmap.gif2009vvv0epen_preject.jpg
200908v8lerrn.jpg2009vvv2jrvr_primitive_drtr_type.jpg
200908v8r.jpg2009vvv2se_plrtferm.jpg
200909v6neiji.jpg2009vvv2ser2.jpg
200909v6wriji.jpg2009vvv2ser3.jpg
200909v9phete.jpg2009vvv2ser4.jpg
200909v9twitter.jpg2009vvv2serv.jpg
200909v9twitter2.jpglege.jpg
200909v9twitter3.jpg
将*.jpg文件名中的09v9改为0919
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$rename’s/09v9/0919/’*.jpg
Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ls
20090819java1.png200909v6wriji.jpg
20090819javaseplatformroadmap.gif2009vvv0epen_preject.jpg
200908v8lerrn.jpg2009vvv2jrvr_primitive_drtr_type.jpg
200908v8r.jpg2009vvv2se_plrtferm.jpg
20090919phete.jpg2009vvv2ser2.jpg
20090919twitter.jpg2009vvv2ser3.jpg
20090919twitter2.jpg2009vvv2ser4.jpg
20090919twitter3.jpg2009vvv2serv.jpg
20090919twitter4.jpglege.jpg
200909v6neiji.jpg
rename的典型应用:
0.批量更改文件扩展名
$rename’s//.txt//.ext/’*
1.批量删除文件扩展名
$rename’s//.txt//’*
2.批量添加文件扩展名
$rename’s/$//.txt/’*
3.按自己的方式批量重命名文件
$rename’s/(/d)/第$1章/’*
$renames/_/-/*.jpg#修改所有的包含_的.jpg文件中的_为-
from:http://hi.baidu.com/suping/blog/item/a6d018172eb740164a90a71e.html