批量/多重命名仅具有特定编号范围的文件

use*_*704 4 command-line rename batch-rename

我有以下情况:

file01.ext
.
.
.
file99.ext
file100.ext
.
.
.
Run Code Online (Sandbox Code Playgroud)

我想(使用 rename )为文件 01-99 插入“0”(以便它们变成 000-099)但不修改大于 100 的文件。我应该使用哪个表达式以及学习正则的好资源是什么诸如此类的表达?

在 Windows 上,我会使用 Total Commander 的多重命名函数,它具有非常简单的重命名语法。对于 Ubuntu,该工具(多重重命名)是否有一些不错的替代方案?

Joh*_*024 5

使用 rename

对于此类活动,通常有用的工具rename来自perl包。它对文件名应用 perl 替换:

rename 's/file/file0/' file[0-9][0-9].ext
Run Code Online (Sandbox Code Playgroud)

这是如何工作的:

  • s/file/file0/

    这是一个perl替换命令。它将file文件名中的替换为file0

  • file[0-9][0-9].ext

    这是rename要操作的文件列表。 [0-9]表示从 0 到 9 的[0-9][0-9]任意数字。 表示任意两个数字,一个接一个。

对于手册页rename这里

注意:这需要perl的版本rename。还有一个rename实用程序是其中的一部分,util-linux但它的工作方式不同。

使用 bash

这种方法使用for循环与模式替换相结合:

for f in file[0-9][0-9].ext; do mv "$f" "${f/file/file0}"; done
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • for f in file[0-9][0-9].ext; do

    这将在与 glob 匹配的每个文件名上开始循环file[0-9][0-9].ext

  • mv "$f" "${f/file/file0}"

    这将使用 bash 的模式替换重命名文件。它替换file为文件名中的 file0`。

  • done

    这标志着for循环的结束。

这种方法需要bash(或其他高级shell)。

bash是默认的交互式 shell,这种方法将在bash. 因此,这应该适用于通常的命令行。