Shell 命令行批量处理图片文件名

Shell 命令行批量处理图片文件名

从网上下载了一堆图片,有的是*.jpg的,有的是*.jpeg的。并且文件名有长有短,很是糟心。因此,我想把这些文件给全部整理好,当然是用shell来处理啦!

说干就干。

循环所有文件

首先,我把所有的乱七八糟的图片,全部放在 ./image/ 这个文件夹下面。 然后在外层写一个i.shshell文件,录入下面的内容。

我的文件结构演示如下:

文件

image/xxx.jpg

image/xxx.jpeg

i.sh

for f in $(find ./image -iname "*.*"); do
  echo $f
done

然后执行 sh i.sh 命令,顺利在命令行里面输出了所有的图片文件。

实现 i++ 数字效果

我想把图片全部命名为 1.jpg 2.jpg 这样的图片文件,所以就需要一个类似于jsi++效果。

于是,把上面代码修改为

# 搞一个i的变量
i=1
for f in $(find ./image -iname "*.*"); do
  ## 打印 i
  echo $i
  echo $f
  ## 计算i++
  ((i++))
done

OK,已经顺利的输出了数字了。到这一步就很明显的得到了我们想要的,下面只要把文件给复制一下就好了。

实现重命名效果

# 搞一个i的变量
i=1
mkdir img
for f in $(find ./image -iname "*.*"); do
  cp $f ./img/$i.jpg
  ## 计算i++
  ((i++))
done

好,如上,我们就将图片全部根据数字重命名,并且放到了一个新的img文件夹中。我们想要的效果就实现了。

用MD5值命名图片

突然想到,数字这东西不靠谱,下次不小心执行了,很容易把图片给搞乱掉,还是MD5值靠谱,并且注意,还能过滤同样的图片。

嗯,理想很丰满,我们来看看。

md5 -q $file

可以输出文件的MD5计算值。就用这个了。改造上面代码如下:

mkdir img
for f in $(find ./image -iname "*.*"); do
  # 计算MD5值,并赋予一个变量
  a=$(md5 -q $f)
  # 复制文件
  cp $f ./img/$a.jpg
done

我是想拿这一堆文件重复实现,所以用复制,如果不需要这样考虑,完全可以使用mv重命名,代码如下:

mkdir img
for f in $(find ./image -iname "*.*"); do
  # 计算MD5值,并赋予一个变量
  a=$(md5 -q $f)
  # 复制文件
  mv $f ./image/$a.jpg
done

以上所有命令均基于MAC系统运行。如果是Linux 可能有细微差异。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏上善若水

S008SELinux的约束操作

约束(constraints),是SELinux很有用的特新,它的使用十分普遍。很多时候,用户觉得约束是一种添加到黑名单上,并使其受限的方法。当然前提是默认允许...

1192
来自专栏JavaEdge

git配置0 配置 用户信息1 配置 行尾和颜色2 有用的设置

2955
来自专栏大内老A

[WCF 4.0新特性] 默认绑定和行为配置

对于传统的WCF配置系统,无论是绑定的配置还是行为(服务行为和终结点行为)都必须具有一个名称。而正是通过整个配置名称,它们才能被应用到目标对象(终结点或者服务)...

18410
来自专栏java一日一条

Java Socket 编程原理及教程

对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进...

741
来自专栏Aloys的开发之路

屏幕输出VS文件输出

问题1:我们在编写程序时经常需要数一些数据到屏幕,来查看我们的结果是否正确,虽然直接输出到屏幕,查看起来呢很方便,但当数据量很大时,需要耗费大量的时间。于是我...

18810
来自专栏抠抠空间

Linux文件操作相关命令

1600
来自专栏极客生活

数据分析Excel之去重

默认是所有列对比,也就是将所有列看成一个元组,全都相同才算重复。 比如上图中,由于「全选」,只有一个重复值就是20行和21行,点击「删除重复项」即可。

731
来自专栏上善若水

016 进程内缓存和进程外缓存的对比

在java应用中,对于访问频率比较高,又不怎么变化的数据,常用的解决方案是把这些数据加入缓存。相比DB,缓存的读取效率快好不少。java应用缓存一般分两种,一是...

1953
来自专栏大数据

scrapy如何顺序执行多个爬虫

scrapy如何单线程顺序执行多个爬虫,刚开始我天真的以为将多个excute顺序罗列就能依次执行每个爬虫了,代码如下所示: ? 谁料,在执行完第一个爬虫之后,...

54110
来自专栏FreeBuf

Altdns:运用置换扫描技术的子域发现工具

Altdns是一款运用置换扫描技术的子域发现工具,它可以帮助我们查找与某些排列或替换匹配的子域。AltDNS接受可能存在于域下的子域中的单词(例如测试,开发,分...

2267

扫码关注云+社区