皆さん、久しぶりですね、お元気ですか?
新年希望大家都开心快乐,健健康康。
好,废话少说,直接切题,最近刚刚学了写Linux的一些命令,因为我的是Windows10系统,众所周知,现在窗户系统提供Linux子系统wsl可以基本一致实现Linux的命令。
于是就想到了这个题目,决定写一下大家一起学习。

首先我们打开wsl,我的要操作的文件夹在g盘,所以我首先要访问到Windows目录文件夹,可通过如下方式:

cd /mnt

这样我们就进入了Windows目录,通过ls -l查看文件列表,我的如下图:
在这里插入图片描述
话不多说,直接进入我的目标文件夹:cd g/picture,然后ls -l看看我们的这次的目标文件列表如下:
在这里插入图片描述
有70多个呢,名字乱七八糟的,所以我们的目的是把这些图片的名字统一的改成数字序号p1,p2…等,为什么不直接改成123呢,这个等下再说。
确定了目的后,就开始,我们直接建立一个rename.sh文件并打开,如下

nano rename.sh

然后编写如下代码:

#!/bin/bash

n=1
g=1
p="p"
gif="gif"
for file in *.jpg; do
    name=$(basename "$file" *.)
    echo mv "$name" "$p$n.jpg"
    ((n+=1))
done

for file in *.gif; do
    name=$(basename "$file" *.)
    echo mv "$name" "$gif$g.gif"
    ((g+=1))
done

简单解释下,就是通过for循环将文件名逐一更改,我们看到有两个for循环,那是因为文件家内有两种格式,我们的for循环是首先遍历jpg格式的文件,然后将其格式前的名字(包括.)统一换成*.,这是为了把名字中空格特殊符号什么的统一去掉,然后通过mv命令重新命名,这里解释下为什么不直接123这样的格式,因为我们的图片有些本身已经是1.jpg的名字了,这时如果for循环遍历的这个文件是其它文件的名字要改为1.jpg的话会把我们这个原本存在的覆盖掉。所以jpg格式的我就改为p1…,而gif格式的就改为gif1,gif2…这样的 。
另外我们在mv前加了个echo,这是因为我们操作更改文件的名字,具有不可撤回性,所以呢我们先通过echo来查看是否像我们期望的那样改掉名字,有点类似python中的print,就是先看看效果。
编辑完成代码后,CTRL+o保存,然后按确认键,然后CTRL+x退出。

然后我们首先通过如下命令赋予这个文件执行的权限:

chmod +x rename.sh

然后执行:

./rename.sh

结果如下:
在这里插入图片描述

这正是我们期望的结果,可以看到把所有的文件都如期换成了想要的名字,然后我们在nano rename.sh打开文件,把echo去掉,改后代码如下:

#!/bin/bash

n=1
g=1
p="p"
gif="gif"
for file in *.jpg; do
    name=$(basename "$file" *.)
    mv "$name" "$p$n.jpg"
    ((n+=1))
done

for file in *.gif; do
    name=$(basename "$file" *.)
    mv "$name" "$gif$g.gif"
    ((g+=1))
done

然后CTRL+o保存,按确认键,然后CTRL+x退出。
再次执行此文件:

./rename.sh

这次不会有任何输出显示,等执行完,我们通过ls -l命令查看如下图:
在这里插入图片描述Yeah!所有的文件都已经按照我们的期望完成了名字的更改。

我们这了例子里面有很多基础的命令,比如ls -l查看文件列表,mv改名命令,chomd 赋予权限的命令,还有bash编码的变量赋值(int,str等),for循环的编写,以及如何访问Windows目录等等。我觉的是个不错的学习例子,同时这个例子也是个强大的工具对文件进行批量的更改,大家也可以举一反三的改不同的名字,甚至文件格式等(友情提示:更改前最好备份一下,当然更重要的是执行前通过echo命令查看是否达到效果)。
希望能够帮到大家!

Logo

更多推荐