如何用命令批量重命名文件

相信大家不管是程序员还是其他行业白领人员,在使用电脑办公时,都会遇到一种需求,就是对大量名字有一定规律的文件进行重命名。

对于程序员来说,在 Linux 环境下,我们可以使用一些命令行工具就可以完成这个需求。

例如,有如下日志文件

root@linux:~/test# ls test-*
test-10.log  test-1.log  test-2.log  test-3.log  test-4.log  test-5.log  test-6.log  test-7.log  test-8.log  test-9.log

我们需要将这些文件的后缀由 log 改为 txt,那么我们可以使用 rename 命令:

rename -v 's/\.log$/\.txt/' test*.log

效果如下:

其中 -v 参数作用是 打印成功重命名的文件名称,实际是输出处理的过程记录,可供我们核查重命名处理是否符合需求。's/\.log$/\.txt/' 是 Perl 正则表达式,意思是将字符串中以 .log 结尾的部分替换为 .txt。

或者可以使用 mv 命令结合 for 循环的方式去处理:

for name in `ls test*.log`; do  mv $name ${name%.log}.txt ; done

命令效果如下:

在循环体里,我们使用 ${name%.log} 这种字符串处理方式,表示从 name 尾部开始删除与 .log 匹配的最小部分,并返回剩余部分;之后,再加上 .txt 后缀。通过这种操作,我们就可以将文件名后缀从 .log 改为 .txt。最后我们用 mv 命令将这个文件真正重命名。

如果我们遇到如下这些文件:

root@linux:~/test# ls test-*
test-10-0eb22520  test-2-09e36680  test-4-0b189764  test-6-0c4bd416  test-8-0d7ebb96
test-1-0949b5c6   test-3-0a7d3e36  test-5-0bb2609c  test-7-0ce5454c  test-9-0e189874

需要将最后一个横线 - 及其之后的字符(这里是8个字符)都去掉,那么我们需要使用 sed 结合 for 循环的方式去处理:

for file in `ls test-*`; do
    newname=$(echo $file | sed 's/.\{9\}$//')
    mv $file $newname
done

命令效果如下:

对于使用 Windows 系统办公的人来说,也可以使用命令工具去进行批量重命名处理。例如在 C 盘下的 test 目录下有许多 jpeg 格式的图片,

需要将文件名后缀重命名为 jpg ,我们可以打开 cmd 窗口,

cd \
cd test
ren *.jpeg *.jpg

执行后效果如下:

在 cmd 窗口,我们可以使用命令 help ren 或者 ren /? 来查看用法提示。


参考:

1 https://manpages.org/rename

2 https://blog.csdn.net/csdnnews/article/details/87927567

3 https://manpages.org/sed

PS:

本文首发于公众号: 程序熵, 更多精彩文章请点击关注 code-shang

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值