如何在linux下批量改名和多子目录下修改文件后缀名的方法和命令总结

如何在linux下批量改名和多子目录下修改文件后缀名的方法和命令总结,第1张

格式固定的话 去掉后面6个嘛~~~在加‘.txt’~~~~ 用os.poen(‘ls’)获取各个目录下的文件名,用a表示文件名,a[0:12]获取到你要的字符串,在加'.txt',用b表示你要该的文件名,每读取一个重命名一个嘛~~~

提供一个在Linux下使用Shell脚本来批量改名的方法,我很久不用Windows系统了,所以只有Linux下的方法。

我这边在Linux下的测试过程是下面这样的:

「0」提醒:在终端terminal中,第一步就是把当前目录切换到文件所在目录,用cd命令。

「1」新建文件夹,起名为「rename_by_source」,用来放置「改名前的文件」、�€.shell脚本文件」、「文件名对应文件」,以及保存「改名后的文件」。你在自己电脑上操作时,也建议你把下载下来的需要改名的文件放到一个单独的文件夹里,这样容易查看一些。

「2」我新建的「rename_by_source」文件夹中,根据你给的文件名对应表,新建了4个「改名前的文件」,它们是空白文件,只是有个文件名而已,另外,估计文件类型是mp3文件,所以后缀名是.mp3,如果你的文件不是mp3类型的话,请届时自行在shell脚本文件里更改相关的代码行。

「3」在文件夹中,新建了「source_name.txt」文件,用来放置(改名前)与(改名后)的对应文件名,跟你给的图片一样,也是一行对应一个文件的,只不过,把ren那一列删除了。如果你要直接使用下面提供的shell脚本的话,也请把你的文件名对应文件中的ren那一列删除,并且「数字」名的前面不要有空格或其它字符。同时,你的文件名对应文件也请保存为「source_name.txt」这个名称和格式的文件。

「4」shell脚本文件「rename_by_source.sh」,内容如下:

#!/bin/bash

cat source_name.txt | while read LINE

do

        ori_name=${LINE:0:7}

        des_name=${LINE:8}

        cp "${ori_name}.mp3" "${des_name}.mp3"

done

解释一下,第3句是逐行读取source_name.txt的内容,并赋值给变量LINE,第5句是把该行的第1至第8个字符作为原始文件名,第6句是把该行的第9至末尾的字符串作为新文件名,第7句是在当前文件夹下「复制」(原始文件名.mp3)文件并重命名为(新文件名.mp3)文件。

之所以采用「复制」而不是「移动」命令,主要还是希望避免误操作。

「5」在前面的文件夹中,新建并保存上述shell脚本文件,然后在终端terminal里赋予此shell脚本文件的可执行权限,反正也没有什么关系,我是直接改为了777权限:

sudo chmod 777 rename_by_source.sh

「6」在终端中,在当前文件夹下运行上述shell脚本文件:

./rename_by_source.sh

完成。

下面是我这里的测试截图,

搞定。

上述shell脚本及演示文件等,已放入百度网盘,链接: 「1F-3Mc2n5-8a4QSCNAVpDfg」, 提取码: 「82jd」,请自取,有效期7天!(链接的前面部分,请自行补充。)

如有帮助,烦请采纳,谢谢!

rename的参数

rename命令的格式:

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

第一个参数:被替换掉的字符串

第二个参数:替换成的字符串

第三个参数:匹配要替换的文件模式

例子:rename main1.c main.c main1.c 将main1.c重命名为main.c

rename支持通配符

? 可替代单个字符

* 可替代多个字符

[charset] 可替代charset集中的任意单个字符

例子:文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278,

如果使用 rename foo foo0 foo?

会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。

如果使用 rename foo foo0 foo??

foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。

如果使用 rename foo foo0 foo*

foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。

如果使用 rename foo0 foo foo0[2]*

从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。

rename支持正则表达式

例子:

字母的替换rename "s/AA/aa/" * //把文件名中的AA替换成aa

修改文件的后缀rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀

批量添加文件后缀rename "s/$//.txt/" * //把所有的文件名都以txt结尾

批量删除文件名rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉

也可以参考《Linux就该这么学》中的章节内容尝试解决。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11958867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存