1.批量改名采用命令rename
公司主营业务:网站制作、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出云岩免费做网站回馈大家。
rename 语法:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v表示显示详细信息,-n表示不实际执行替换,只是看哪些文件会受影响。 -f 表示强制,不管是否有重名。
perlexpr是perl语法的表达式, files则是匹配项。因此,该命令执行结果与perlexpr有关,不一定就是改文件名。
实例: 将所有文件名*.html 改为对应的.htm
rename 's//.html$//.htm$/' *.html
去bak后缀
rename 's//.bak$//' *.bak
将文件名大写改为小写
rename 'y/A-Z/a-z/' *
但rename不能递归修改。
2.递归改名,用find+rename
将文件名的abc改为xyz
find . -name "abc*" -exec rename 's/abc/xyz/' {} /;
该命令可以将当前目录下所有子目录的文件都改名。
3.内容替换,用find+sed
将所有ablo 替换为ablozhou
find . -type f -exec sed -i -e "s/ablo/ablozhou/g" {} /;
sed 命令 -i 表示 --in-place,文件原地替换。-e 后跟替换表达式
linux中批量把文件名大小写转换一哥们从现场打来急电说现在有一个目录,目录下有上千个文件,现在需要把文件名由小写全部转化为大写。首先不能写脚本,那样的话还要教他用vi,
改权限,只能用命令了。字符转换嘛,当然想到的是
tr
:
for
file
in
*
;do
mv
$file
`echo
$file
|
tr
'a-z'
'A-Z'`;done过了一会儿这哥们又打电话说,扩展名不要改为大写的,保留为小写就行了。这样明显分段的事情当然要交给
awk
了:
for
file
in
*;do
mv
$file
`echo
$file
|
awk
-F
.
toupper($1).$2}'
`;done这样是可以把类似
a.txt
的文件修改了,但有多个扩展名的就没招了,比如
b.tar.gz,还好
awk
支持变量:
for
file
in
*;do
mv
$file
`echo
$file
|awk
-F
.
'
{
for
(i
=
1;
i
=
NF;i++)
if
(i
==
1)
result
=
toupper($i);
else
result
+=
.$i;
$result;
}'
`;done但结果是错的,一个文件名也没有改变,查了下说gawk才支持toupper,
tolower,换成gawk
还是不对。最后没办法只好找个折衷的方法,先全部转化为大写,然后再将扩展名转回小写:for
file
in
*;
do
mv
$file
`echo
$file
|
sed
-e
s//.TXT//.txt/g
`;done但是/.并没有被转义成.,
而依然是代表任意字符,这样的话如果basename中含有扩展名就悲剧了。
试了几下发现这样才是转义的:
sed
-e
s/[.]TXT/.txt/g
`;ok.
在linux下的VIM中替换命令的格式是;[range]s/pattern/string/[c,e,g,i]
range:指的是范围
s(search):表示搜索
pattern:就是要被替换的字符串
string:将替换pattern
C:每次替换前询问
g(globe):不询问,将做整行替换
e(error):不显示error
i:(ignore)不分大小写
用cat file | tr a-z A-Z newfile 可以将文件内容转换为大写。cat file | tr A-Z a-z newfile可以转换为小写。
也可以用 awk '{print toupper($1)}' file newfile