shell批量修改文件名(笔记)

如题所述

第1个回答  2024-10-15
在工作中,利用 shell 批量修改文件名是常见操作,如 Nginx 日志切割时处理大量文件。以下步骤演示如何使用 shell 命令实现批量文件名修改。

首先,创建测试文件:

mkdir sub_str

[root@localhost sub_str]# touch chaochao_{1..5}_finished.jpg

[root@localhost sub_str]# touch chaochao_{1..5}_finished.png

这将生成 chaochao_1-5_finished.jpg 和 chaochao_1-5_finished.png 文件。

目标:去除所有文件的 '_finished' 后缀。

方法一:单个文件替换:

例如:mv chaochao_1_finished.jpg chaochao_1.jpg

此操作完成单个文件修改。

方法二:使用变量和子串功能:

定义变量 f:

f = chaochao_1_finished.jpg

echo ${f//_finished/}

注:全局替换 '_finished' 后缀为空。

方法三:结合思路一与二,利用反引号:

mv $f `echo ${f//_finished/}`

注:此命令修改文件名。

使用 for 语句批量处理文件名修改:

for file_name in `ls *fin*jpg`; do mv $file_name `echo ${file_name//_finished/}`; done

for 语句和 ls 命令结合,查找所有 .jpg 文件,使用正则表达式过滤出包含 '_finished' 的文件。然后,使用 mv 命令替换后缀。

理解 for 语句和正则表达式的使用有助于高效处理文件名修改任务。此过程涉及单个文件修改、使用变量和子串功能,以及利用 for 语句和反引号执行批量操作。

最后,执行此脚本完成所有目标文件名的批量修改。
相似回答