Linux中如何批量修改文件名

本文介绍如何使用mv和rename命令批量重命名文件,包括修改文件名、添加前后缀、替换特定字符等操作。提供了多种场景下的实用示例,帮助读者掌握高效文件管理的方法。

修改文件名

  • 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

 也可用 sed 实现
#!/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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值