linux · 2023年12月20日 0

linux目录下批量修改文件后缀

一、添加文件后缀

现在有一个场景,需要将一个目录下的所有文件都加上一个后缀名如.bak怎么操作呢?

我们可以用这条命令来操作:

rename 's/$/.conf/' *

输出的结果是:

现在所有文件的后面,都加上了一个.bak的后缀

但有个问题,那个名为“1的目录后面,也加上了一个.bak,这不是我们想要的。

如何操作才能避免呢,我们可以用find命令来操作:

find . -maxdepth 1 -type f -exec rename 's/$/.bak/' {} \;

输出结果如下,名为“1”的目录这次并没有加上后缀:

这条命令使用了 ‘find ‘命令,指定了 ‘-maxdepth 1‘ 来限制查找的深度为当前目录,而不包括子目录。’-type f ‘表示只查找文件,而不包括目录。
然后,通过’ -exec ‘选项,对找到的每个文件执行’ rename 's/$/.bak/' {} \; ‘这个命令,将文件名末尾添加’.bak‘后缀。

如果想对当前目录下以及所有子目录中的文件添加.bak后缀,而不对目录进行操作,可以使用以下命令:

find . -type f -exec rename 's/$/.bak/' {} \;

结果如下:

这个命令使用了 find 命令,查找所有类型为文件 (-type f) 的文件。然后,对每个找到的文件执行 rename 's/$/.bak/' {} \; 命令,将文件名末尾添加.bak后缀。

请注意,这个命令会在当前目录及其所有子目录中的所有文件上执行添加.bak后缀的操作。

二、去掉文件后缀

有添加后缀的操作,就一定会有去掉后缀的操作,如何将文件的后缀去掉呢?

我们可以用这条命令:

rename 's/\.bak$//' *.bak

结果如下:

这个命令使用了 rename 工具,它的正则表达式 ‘s/\.bak$//‘ 表示将文件名末尾的.bak替换为空字符串,实现了去掉.bak后缀的效果。

请注意:

  • \.bak$’ 中的 ‘\.bak’ 表示匹配‘.bak’,‘$’ 表示匹配字符串的末尾。
  • *.bak’ 是通配符,表示匹配所有以‘.bak’结尾的文件。

如果想去掉当前目录及其所有子目录中文件名末尾的.bak后缀,你可以使用以下命令:

find . -type f -name '*.bak' -exec rename 's/\.bak$//' {} \;

结果如下:

这个命令使用 find 查找所有类型为文件 (-type f),并且文件名匹配 *.bak (-name '*.bak') 的文件。然后,对每个找到的文件执行 rename 's/\.bak$//' {} \; 命令,将文件名末尾的.bak后缀替换为空字符串。


本章结束~ifan