Linux下怎么通过shell批量修改文件名后缀?

Linux下怎么通过shell批量修改文件名后缀?,第1张

比如修改一下目录下的所有文件的后缀
ls -l|awk '{print $9}'|xargs -I{} mv {} {}bak
[root@ test]# touch a b c
[root@ test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Apr 27 21:50 a
-rw-r--r-- 1 root root 0 Apr 27 21:50 b
-rw-r--r-- 1 root root 0 Apr 27 21:50 c
[root@ test]# ls -l|awk '{print $9}'|xargs -I{} mv {} {}bak
[root@ test]# ls -l
total 0
-rw-r--r-- 1 root root 0 Apr 27 21:50 abak
-rw-r--r-- 1 root root 0 Apr 27 21:50 bbak
-rw-r--r-- 1 root root 0 Apr 27 21:50 cbak

如果您想批量更改文件夹的名称,您可以使用以下方法之一:

在 Windows 上使用批处理脚本

您可以创建一个批处理脚本并将其用于批量更改文件夹名称。以下是一个简单的批处理脚本示例:

@echo offfor /d %%a in () do (   set oldname=%%a   set newname=new_%%a
ren %oldname% %newname%
)

在 macOS 和 Linux 上使用命令行:

您可以在命令行中使用以下命令批量更改文件夹名称:

bashCopy codefor f in ; do mv "$f" "new_$f"; done

请注意,在使用以上方法之前,请务必备份您的文件。

dir C:\Users\user\Desktop\123456 -Recurse | ForEach-Object {$count =1}{Rename-Item -Path $_FullName -NewName ("test{0}{1}" -f $count,[SystemIOPath]::GetExtension($_FullName));$count++}

以上Code把桌面文件夹123456里面的所有文件包括Folder及Folder里面的所有内容改名为test+数字+文件后缀的形式,数字为递增。上面的代码虽然可以批量修改成功,但会提示重命名前后的文件路径应该不同,所以建议在批量修改前手动备份,然后将批处理后的文件放在一个不同的路径下。仅供参考,可以自己尝试发挥。

linux的文件重命名常用的是mv命令和rename命令,具体重命名的 *** 作步骤如下:

1、首先我们打开一个虚拟机。

2、进入终端命令界面,先用“cd”命令进入文件所在文件夹中。

3、可以先创建一个文件(”touch“),再“ls”一下发现成功创建了一个“oldtxt”文件。

4、输入命令:mv   修改前文件名   修改后文件名,按回车。

5、输入命令“ls”,可以看到文件重命名为新的了。

1、可以借助于shell命令执行另一个脚本文件或者用变量保存。比如ash和bsh,ash中调用bsh的代码,一起输出"hello world"的字符串。bsh的代码如下echo " world!"。

2、ash可以借助""来执行bsh脚本,bsh执行结果可以保存在变量中,也可直接输出,ash中的内容如下:echo "可以用命令来执行脚本文件"echo "hello `/bsh`"var=`/bsh`echo"hello $var";。

3、ash也可以借助source命令执行bsh脚本,bsh执行结果可以保存在变量中,也可直接输出。ash中的内容如下:echo "用source命令执行脚本文件"echo "hello `source /bsh`"var=`source /bsh`echo "hello $var"。

4、ash中也可以借助于bash、sh等命令来执行bsh脚本,bsh的执行结果可以保存在变量中,也可以直接输出。ash中的内容如下。

5、另外,也可以使用$(),将bsh的执行结果的内容保存到变量中,就完成了。

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

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

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

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

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

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

「4」shell脚本文件「rename_by_sourcesh」,内容如下:

#!/bin/bash
cat source_nametxt | while read LINE
do
        ori_name=${LINE:0:7};
        des_name=${LINE:8};
        cp "${ori_name}mp3" "${des_name}mp3";
done

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

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

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

sudo chmod 777 rename_by_sourcesh

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

/rename_by_sourcesh

完成。

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

搞定。

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

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


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

原文地址: https://outofmemory.cn/yw/13407343.html

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

发表评论

登录后才能评论

评论列表(0条)

保存