修改文件名
-
mv
-
rename
-
for循环
mv命令
man mv ==> mv -move(rename) files 移动或重命名文件
,mv [path/]oldfilename [path/]newfilename
“mv命令只能对单个文件重命名”
将 a 重命名为 b 文件
mv a b
rename命令
-
rename
-
man rename ==> rename from to file
-
from:修改什么,to:改成什么,file:哪些文件files需要修改
-
-
简单语法: rename要替换内容 替换内容替换的文件列
(区配) (替换) (文件,可使用?、*、[charset])
(原string) (目标string) (文件列表)
-
格式:rename 原名 替换名 要改的文件
? 可替代单个字符
* 可替代多个字符
[charset] 可替代charset集中的任意单个字符
eg:
-
将a.txt重命名为b.txt
rename a.txt b.txt a.txt
-
将后缀名 .txt 修改为 .html
rename .txt .html *.txt
#!/bin/bash
for file in `ls *.html`
do
newfile=`echo $file | sed 's/html/php/g'`
mv $file $newfile
done
- 有多个文件test1、test2、test3……test255
将单个数字 1-9 变换成 01-09 ==>test01-test09
rename test test 1 test? //将 test 替换成 test0 替换文件为 test?的文件 (5个字符长度)
将两位数字01-99 重命名为001-099 ==>test001-test099
rename test test0 test??
将test200-255的文件 重命名为testO200-255
rename test testO test[2]*
有些版本不支持正则要多学会用 man 或者 --help 查看当前Linux的帮助,可查询是否支持正则。
支持添加、修改后缀
rename a a.txt a
rename .txt .html *.txt //将.txt为后缀的文件改为.html
下面的表达式将 “ ” 、 ‘ ’、s、g 去掉,即可基本可在不支持正则的linux版本中实现
rename支持正则表达式" "/' ' 与sed中的正则语法几乎一样(perl正则语法)
s : 替换 g : 行内全面替换 \ : 转义字符
-
字母的替换
rename "s/AA/aa/" * //把文件名中的AA替换成aa
rename 's/A-Z/a-z/' * //把文件名中的大写字母替换成小写字母
不支持正则版本:rename [A-Z] [a-z] *
//把文件名中的AA替换成aa
rename 's/A-Z/a-z/' * //把文件名中的大写字母替换成小写字母
不支持正则版本:rename [A-Z] [a-z] *
-
修改文件的后缀
rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀
rename 's/.html$/.htm/' * //把.html改成.htm
不支持正则版本:rename .html .php *
rename 's/.html$/.htm/' * //把.html改成.htm
不支持正则版本:rename .html .php *
-
批量添加文件头部
rename 's/^/hello/' * //在文件头部添加上hello
//在文件头部添加上hello
-
批量添加文件后缀
rename "s/$//.txt/" * //把所有的文件名都以txt结尾
rename 's/$/.zip/' * //在尾部追加.zip后缀
rename 's/$/.zip/' * //在尾部追加.zip后缀
-
批量删除文件名后缀
rename 's/\.txt$//' *.txt //把所有以.txt结尾的文件中的.txt删掉
rename 's/.zip$//' * //把文件中的.zip后缀删除
//把所有以.txt结尾的文件中的.txt删掉
rename 's/.zip$//' * //把文件中的.zip后缀删除
-
批量删除文件名
rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉
-
去掉文件名里的 空格 PS:+不能修改为 \ +,否则替换失败。
rename 's/[]+/_/g' * //[] _ 表示空格 或者用[:space:]表示空格
rename 's/[[:space:]]+/_/g' * //[::]表示匹配冒号内的内容,在外面再加一层[]表示替换
//[] _ 表示空格 或者用[:space:]表示空格
rename 's/[[:space:]]+/_/g' * //[::]表示匹配冒号内的内容,在外面再加一层[]表示替换
去掉空格 可用tr、sed命令来完成
for循环
-
例如在脚本中实现:在指定文件夹中,批量创建文件,并重命名所有文件
题目:在/XXX/user/XXX/docu/t/testDIR目录下创建test-1—test-10的文件
脚本:创建目录和文件命令行也直接可改成 mkdir testDIR 和touch test-$i 省略/bin/
由于想在脚本中实现 $ll 命令,所以要先用 shopt命令 显示和设置shell中的行为选项,再用 alias命令设置 alias ll =‘ ls -l’ 命令
执行结果:
目录不存在时
目录存在时
先清空 但不删除testDIR目录,
$rm -rf testDIR/*
$./test1.sh
将test-文件 用for循环改成TEXT_文件
脚本:
执行结果:
可查看目录 $ll testDIR/ 见同样结果,完成重命名。
参考:
http://man.linuxde.net/rename
http://www.jb51.net/LINUXjishu/240112.html
http://blog.51cto.com/magic3/1431155