我有大约 180 个具有相同结构的文件:000-aaaaaaaa.txt
.
文件名的正则表达式:/^[0-9]{3}\-[a-zA-Z]+$/gi
(3 位数字 + -
+ 字母 + .txt
)。
我想剪切数字部分和-
每个文件名
例如
000-hello.txt
->hello.txt
001-world.txt
->world.txt
002-ubuntu.txt
->ubuntu.txt
003-linux.txt
->linux.txt
我有大约 180 个具有相同结构的文件:000-aaaaaaaa.txt
.
文件名的正则表达式:/^[0-9]{3}\-[a-zA-Z]+$/gi
(3 位数字 + -
+ 字母 + .txt
)。
我想剪切数字部分和-
每个文件名
例如
000-hello.txt
->hello.txt
001-world.txt
->world.txt
002-ubuntu.txt
->ubuntu.txt
003-linux.txt
->linux.txt
使用mmv重命名文件:
您还可以将数字与范围匹配匹配:
(递归重命名文件):
;
扩展到任意数量的目录(与 相同**/
)。*
匹配任何字符零次或多次。?
匹配任何单个字符。[]
匹配一个列表或一系列字符。#
对 from 模式中的第 n 个通配符的引用。使用基于 Perl 的
rename
命令:如果文件数量大到足以使命令超过 shell 的
ARG_MAX
,那么您可以使用或者
请注意,这
[0-9][0-9][0-9]-*.txt
是由 shell 处理的,需要是 shell glob 表达式而不是正则表达式。-n
一旦你很高兴它正在做正确的事情,就删除它。由于我在这里还没有看到它,因此您可以使用repren。虽然默认情况下没有安装它,但它确实支持基于正则表达式的文件重命名。你可以像这样只做一个正则表达式模式:
上面的示例删除所有文件名中的前 3 位,如果它们位于当前目录中所有文件的开头,则递归地删除所有文件名中的前 3 位。它会进行试运行,以向您展示它在不实际执行的情况下会做什么 -
--dry-run
一旦您确定它会按照您的意图进行操作,请移除该钻头。repren
还支持模式文件,允许您在 1 中进行多次替换:模式文件如下所示:
...等等。
最后,它支持正则表达式组。考虑这个模式文件:
该
\1
语法插入第一(bracketed)
组的内容。要在命令行上执行此操作,您需要使用我认为的单引号(如果我错了,请纠正我):这只是触及
repren
功能的表面。它也可以选择更改文件的内容(因此在--rename
上述所有示例中都需要)。免责声明:我不参与
repren
或以任何方式开发它,我只是觉得它是一种非常宝贵的节省时间的工具。我知道这个问题是用命令行标记的,但如果 GUI 工具对你有用,Thunar文件管理器有一个很棒的批量重命名工具。你可以直接从你的包管理器安装 Thunar。安装后,选择感兴趣的文件,然后转到“编辑”菜单下的“重命名”。
Thunar 的一大优势是它可以让您预览新名称,因此您不必第一次就完全正确地获取命令或正则表达式。它还可以执行超出正则表达式范围的重命名任务,例如在文件名中插入连续数字。
在Ubuntu 软件包网站上有更多关于 Thunar 的信息。Free Software Magazine 也有一篇关于它的不错的概述文章,并附有截图。
我过去经常使用基于终端的文件浏览器
bulkrename
中的命令来完成此操作。ranger
步骤如下:v
。:bulkrename
命令,这会将您带到 vim 或默认编辑器中所有选定文件名的列表。我通常会构建一个 shell 脚本来重命名每个文件。
我将 ls 的输出放入一个文件中,我编辑该文件以制作脚本。这
emacs
在vim
.如果我仍然不确定自己,我可能会将文件放在临时子目录中,以防万一出现问题。如果使用 , 我可能也会使用子目录
mmv
。