Linux下Shell脚本实现批量重命名文件夹,批量重命名文件(让原本繁重的工作变得简单)

最近接了个项目,具体做什么都不说了,其中有个工作就是批量更改文件夹,然后批量更改文件夹下的文件名字,一会儿先贴代码,再详细解释步骤。

下面是我的简化版的目录结构,实际上有上百个。

project
    dir1
        dir1.py
    dir2
        dir2.py

本人在目录project下

第一步:

先将所有的py文件重命名为test.py,因为py文件在不同的目录下,所以都为一个名字方便管理,同时也不会冲突,代码入下:

for var in *;
do mv "$var/$var.py" "$var/test.py";
done

注意,这里我的目录结构是:文件夹的名字和py文件的名字相同,如果各位的不一样,可以改成这样的写法:

for var in *;
do mv "$var/*.py" "$var/test.py";
done

如果也不是这种的,请大家视自己的情况稍作修改。

第二步:

第二步,将所有的文件夹重命名为c+编号+名字,即将 dir1改为c1_dir1, dir2改为c2_dir2。以此类推,代码如下:

unset j;
set j=0;
for i in *;
do let j+=1;
echo "$j";
mv "$i" ./c"$j"_"$i";
done;

即可完成我所说的上诉任务。

代码详细讲解:

首先感谢各位解决了问题之后会过来看一下讲解!


第一步的代码:

for var in *;

使用遍历的for循环,得到目录下所有的文件,此时的var里面存的是目录,如:dir1,dir2。

do 代表了 for 循环的开始,done代表for循环的结束,中间的mv相信大家都知道,是linux中的移动命令,在这里作为重命名使用。

do mv "$var/$var.py" "$var/test.py";

在mv 后面的字符串中,"$var"代表了我们的for循环中的变量var,$符号是引用我们定义的变量,所以上面的代码类似于我们执行了:

mv dir1/dir1.py dir1/test.py

而for循环遍历了所有的文件夹,所以对所有的文件夹都操作了一次。

第二步的代码:

unset j;
set j = 0;

unset是linux设置变量的语句,set是设置局部变量,这里的局部变量指的是当前的终端的局部,如果想设置一个所有的终端都能访问的变量,则需要使用其他的命令,有的是env,在这里了解set以及unset即可。

set前进行unset,是因为如果不unset,就算执行了set j = 0;如果 j 是事先已经存在的,也不可能重新赋值为0。

然后 for 循环就不需要讲了

do let j+=1;

将 j 变量自加 1 ,如果不用let,结果将会是这样的:

1
11
111
1111
....................

然后下面的 mv 语句也不需要讲解了。

结束语:

谢谢大家看了这篇文章,如果有不足之处请大家指出,也感谢学长告诉我的一句话:

程序员就应该用程序员的方法做事情!

 

 

 

©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页