技巧:Linux下如何快速大批量重命名

1.背景

假设有这样一种情况,我们利用手机或相机拍了很多好看的照片,但是照片的命名很不规律,我们想把它统一为自己想要的风格。

在我的Linux下中,有很多我拍摄的照片,如下。技巧:Linux下如何快速大批量重命名

但每个照片的命名中,都夹杂了一个’test’的字段,而我不想要在文件名中出现这个字段,该如何处理呢?

技巧:Linux下如何快速大批量重命名
# 创建测试样本,可以使用以下命令
for name in {1..1000}; do  touch 2022-04-18-yunweizeichuan-${name}-test.jpg; done

2.最小化解决办法

解决一个大问题,往往是从解决一个最小单元着手,如果想为单个文件进行重命名,可以使用mv命令,比如:

mv 2022-04-18-yunweizeichuan-1-test.jpg 2022-04-18-yunweizeichuan-1.jpg 

这样执行后,就能获得我们想要的结果。

技巧:Linux下如何快速大批量重命名

我的思路是:

技巧:Linux下如何快速大批量重命名1.对单个文件进行重命名
技巧:Linux下如何快速大批量重命名2.对单个文件通过变量的形式重命名
技巧:Linux下如何快速大批量重命名3.对多个文件通过变量的形式重命名

对单个文件进行重命名,也就是使用mv命令,那对单个文件通过变量的形式重命名,则需要用到shell字串的知识。
${变量}              返回变量值
${#变量}             返回变量长度,字符长度
${变量:start}        返回变量offset数值之后的字符
${变量:start:length} 提取offset之后的length限制的字符
${变量#word}         从变量开头删除最短匹配的word子串
${变量##start}       从变量开头删除最长匹配的word子串
${变量%word}         从变量结尾删除最短匹配的word子串  
${变量%%word}        从变量结尾删除最长匹配的word子串 
${变量/pattern/string} 用string代替第一个匹配的pattern
${变量//pattern/string} 用string代替所有匹配的pattern

很显然,这里会用到替换的知识,也就是”用string代替第一个匹配的pattern”。我们换种方法,采用变量的方式对文件进行重命名:

filename=`ls 2022-04-18-yunweizeichuan-2-test.jpg`
mv $filename ${filename/-test/}

这里的string使用空格代替,表示2022-04-18-yunweizeichuan-2-test.jpg文件名将”-test”代替为空格,输出2022-04-18-yunweizeichuan-2.jpg

技巧:Linux下如何快速大批量重命名

单个文件采用变量的形式重命名成功了,那如何把所有的文件都传递给变量使用呢?这里使用for循环。

for filename in `ls *test.jpg`;do echo $filenamedone

这不就全部赋值给变量了吗?再结合一下单个文件变量重命名的方法:

for filename in `ls *test.jpg`;do mv $filename ${filename/-test/}done

执行完成后,再次查看,发现所有文件都已经正确命名了。技巧:Linux下如何快速大批量重命名

往期推荐:

  1. 总结:shell命令统计字符串长度的4种实现方式

  2. 在ESXi上搭建自己的OpenWRT软路由系统

  3. 部署Harbor容器仓库,给镜像文件一个家


文章最后,给大家准备了8T的电子书大礼包,包含计算机基础类、编程类、人工智能、前端和大数据等等,回复 「1024」获取!



原文始发于微信公众号(运维贼船):技巧:Linux下如何快速大批量重命名

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/177369.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!