如何通过特定名称递归查找文件夹中的所有文件并重命名它们?

如何通过特定名称递归查找文件夹中的所有文件并重命名它们?

我有一个文件夹树。其中一些文件夹包含名为“.file.php”的文件。如何将树中所有具有此名称的文件递归重命名为“.file1.php”?我在 Debian 服务器上。

答案1

完整的解决方案如下

find -name '*.file.php' -exec rename 's/\.file\.php$/.file1.php/' {} \;

答案2

您在 debian 上有吗rename?我不知道,但是因为它在 ubuntu 上有,所以我想是的。

NAME rename - 重命名多个文件

摘要 重命名 [ -v ] [ -n ] [ -f ] perlexpr [ 文件 ]

描述“rename”根据作为第一个参数指定的规则重命名提供的文件名。perlexpr 参数是一个 Perl 表达式,它有望修改 Perl 中至少一些指定文件名的 $_ 字符串。如果给定的文件名未被表达式修改,则不会重命名。如果命令行中未提供文件名,则将通过标准输入读取文件名。

   For example, to rename all files matching "*.bak" to strip the
   extension, you might say

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

   To translate uppercase names to lower, you'd use

           rename 'y/A-Z/a-z/' *

从谷歌搜索结果复制的一个例子可能已经非常接近你想要的:

以下是重命名命令的示例:

重命名 -n 's/.htm$/.html/' *.htm

-n 表示这是一次测试运行,实际上不会更改任何文件。它会向您显示如果删除 -n 将被重命名的文件列表。在上述情况下,它会将当前目录中的所有文件从文件扩展名 .htm 转换为 .html。

如果上述测试运行的输出看起来没问题,那么您可以运行最终版本:

重命名 -v 's/.htm$/.html/' *.htm

-v 是可选的,但最好将其包括在内,因为它是重命名命令所做更改的唯一记录......

相关内容