Linux shell利用sed如何批量更改文件名详解
发布时间 - 2026-01-11 03:19:14 点击率:次前言

本文主要给大家介绍了关于Linux shell用sed批量更改文件名的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
示例
去除特定字符
目标:将 2017-01-01.jpg、2018-01-01.jpg 改为 20170101.jpg、20180101.jpg
方法:将所有 - 替换为空
for file in `ls | grep .jpg` do newfile=`echo $file | sed 's/-//g'` mv $file $newfile done
这里使用sed进行标准输出的字符串替换,其通用格式如下:
stdout | sed 's/pattern/replace/'
上述示例中,在末尾添加g用于替换所有匹配项,而不仅仅替换第一个匹配项。
中间插入字符
目标:将 book01.txt、paper02.txt 改为 book-01.txt、paper-02.txt
方法:用分组匹配分别获取待插入位置两侧的字符串,再通过反向引用实现替换
for file in `ls | grep .txt` do newfile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'` mv $file $newfile done
分析
上述示例首先通过 ls 和 grep 命令得到待改名的文件列表,然后用 sed 命令进行字符串的替换,最后再使用 mv 命令来完成文件名的更改。
获取待改名文件列表的方法有很多,可以通过 find 命令,也可以直接给出字符串,我们将在下文中提到。
注意 for 循环后面的 ls | grep .txt,这条命令用两个反单引号括了起来,与 $(ls | grep .txt) 的作用相同,被包围的字符串会被当作命令执行,然后返回字符串结果。
文件名包含空格的解决方法
我们可以直接将文件列表写到 for 循环中,而不是通过命令来得到,例如:
for file in "file1 file2 file3" do ... done
可以看到 for 循环是通过空格来分割字符串,因此如果待更改的文件名中包含空格的话,就会被拆分成多个文件名,从而出错。
要解决这个问题,我们可以将 IFS(内部字段分隔符)设置为换行符 \n,这样一来,for 循环就会按行来获取变量的值,确保每次获取的确实是一个完整的文件名。
设置 IFS 变量的命令需要放在 for 循环之前:
IFS=$'\n' for file in `ls` do ... done
也可以直接使用 while read 命令一次读取一行到变量 file 中:
ls | grep "*.txt" | while read file do ... done
使用 find 获取文件列表
之前的示例中,我们是通过 ls 命令来获取文件列表。该命令只能获取某个目录的文件,而且没法进行多种条件的筛选。
而一说到文件的查找,不得不提到功能强大的 find 命令。该命令可以在多个层次的目录中查找文件,并能够设定诸如创建时间、文件大小、所有者等多种条件,查找起文件来特别方便灵活。
用 find 命令来获取文件列表,再用 sed 命令配合正则表达式来修改文件名,这两个命令的结合几乎能完成所有常见的批量改名任务。
例如,将所有大于1M,且后缀为txt或jpg的文件,由形如 book_20170101.txt、image_20170101.jpg 的文件改名为 20170101-book.txt、20170101-image.jpg,代码如下:
for file in `find . -size +1M -name "*_*.txt" -o -name "*_*.jpg"` do newfile=`echo $file | sed 's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./'` mv $file $newfile done
有关 find 命令的更多用法,可以参考 https://www./article/108198.htm
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# linux
# shell
# sed
# 替换
# 批量更改文件名
# Shell命令批量修改图片文件名
# Linux shell中改文件名的方法总结
# 文件列表
# 就会
# 多个
# 我们可以
# 可以直接
# 是一个
# 放在
# 相关内容
# 第一个
# 有很多
# 说了
# 不多
# 说到
# 而不
# 这两个
# 这条
# 可以通过
# 给大家
# 可以看到
# 写到
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
音乐网站服务器如何优化API响应速度?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
百度浏览器如何管理插件 百度浏览器插件管理方法
制作旅游网站html,怎样注册旅游网站?
郑州企业网站制作公司,郑州招聘网站有哪些?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel如何实现事件和监听器?(Event & Listener实战)
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Laravel如何优化应用性能?(缓存和优化命令)
北京专业网站制作设计师招聘,北京白云观官方网站?
如何快速搭建高效WAP手机网站吸引移动用户?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Laravel如何生成URL和重定向?(路由助手函数)
如何在阿里云虚拟服务器快速搭建网站?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
IOS倒计时设置UIButton标题title的抖动问题
如何利用DOS批处理实现定时关机操作详解
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
高性价比服务器租赁——企业级配置与24小时运维服务
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
如何自定义建站之星模板颜色并下载新样式?
使用C语言编写圣诞表白程序
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
微信小程序 五星评分(包括半颗星评分)实例代码
C++用Dijkstra(迪杰斯特拉)算法求最短路径
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
详解CentOS6.5 安装 MySQL5.1.71的方法
如何快速搭建高效可靠的建站解决方案?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
高端建站如何打造兼具美学与转化的品牌官网?
如何挑选高效建站主机与优质域名?

