一、添加文件后缀
现在有一个场景,需要将一个目录下的所有文件都加上一个后缀名如.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