在Linux中使用正则表达式重命名文件。

12 浏览
0 Comments

在Linux中使用正则表达式重命名文件。

我有一组文件的命名方式如下:\nFriends - 6x03 - Tow Ross\' Denial.srt\nFriends - 6x20 - Tow Mac and C.H.E.E.S.E..srt\nFriends - 6x05 - Tow Joey\'s Porshe.srt\n\n我想将它们重命名为以下形式:\nS06E03.srt\nS06E20.srt\nS06E05.srt\n\n在Linux终端中,我应该如何完成这个任务?\n我已经安装了rename,但使用以下命令时出现错误:\n

rename -n 's/(\w+) - (\d{1})x(\d{2})*$/S0$2E$3\.srt/' *.srt

0
0 Comments

在Linux中使用正则表达式重命名文件的原因是为了批量操作文件的重命名,以提高效率。对于需要重命名的文件,可以使用通配符*匹配任意字符串(不包括/),使用?匹配字符串中的任意一个字符。在替换字符串中,可以使用#N来引用第N个通配符匹配的结果。

解决方法是使用mmv命令(mass-move),它是一个简单而实用的工具。在这个工具中,可以用mmv '匹配字符串' '替换字符串'的方式来进行文件重命名。在匹配字符串中使用通配符*和?来匹配需要重命名的文件,然后在替换字符串中使用#N来引用通配符匹配的结果。

例如,对于文件名为'Friends - 6x?? - Tow *.srt'的文件,可以使用mmv 'Friends - 6x?? - Tow *.srt' 'S06E#1#2.srt'来进行重命名。其中,#1#2代表通配符??匹配到的两个数字(匹配的结果为03),将文件重命名为S06E03.srt。

此外,mmv还提供了其他的匹配方式,如使用[]和;来进行匹配。不仅可以进行重命名,还可以进行文件的移动、复制、追加和链接操作。

总之,使用正则表达式和mmv命令可以方便地对文件进行批量重命名操作,提高工作效率。详细的用法可以查看mmv命令的man页。

0
0 Comments

在Linux中使用正则表达式重命名文件的原因是为了批量重命名文件,以提高效率。解决方法是使用find命令结合perl、xargs和mv命令来实现。

首先,我们可以使用find命令找到所有需要重命名的文件,例如:

find . -type f

这将输出所有需要重命名的文件路径。

然后,我们可以使用perl命令来执行正则表达式替换操作,并将结果输出给xargs命令,例如:

find . -type f | perl -pe 'print $_; s/input/output/' | xargs -d "\n" -n2 mv

这将将文件名中的"input"替换为"output"。

通过将输出结果使用xargs命令进行处理,我们可以每次处理两个文件,并使用mv命令进行重命名操作。

这种方法的优点是简单直接,但缺点是需要安装Perl。如果系统中没有安装Perl,可以考虑使用其他方法。

另一种更高级的方法是使用null字节作为分隔符来处理文件名中的空格和换行符。例如,我们可以使用find命令的-print0选项将文件名以null字节分隔符输出,然后使用perl命令和xargs命令处理这些文件名,例如:

find . -type f -printf '%P\0' | perl -0 -l0 -pe 'print $_; s/(.*)\.txt/$1\.md/' | xargs -0 -n 2 mv

这将将所有的".txt"文件重命名为".md"文件。

使用null字节作为分隔符可以避免文件名中的空格和换行符引起的问题,提高了命令的鲁棒性。

需要注意的是,在运行命令之前,最好先检查find命令的输出,确保它们符合预期,以免意外删除文件。

总结起来,通过在Linux中使用正则表达式来重命名文件可以提高效率。我们可以使用find命令找到需要重命名的文件,然后使用perl和xargs命令进行处理,并使用mv命令进行重命名操作。另外,使用null字节作为分隔符可以避免文件名中的空格和换行符引起的问题。这些方法可以帮助我们快速、准确地批量重命名文件。

0
0 Comments

在Linux中使用正则表达式重命名文件的问题出现的原因是使用的命令中忘记了在星号前面加上一个点。

解决方法是在命令中加上一个点,正确的命令应该是:

rename -n 's/(\w+) - (\d{1})x(\d{2}).*$/S0$2E$3\.srt/' *.srt

另外,在OpenSUSE、RedHat和Gentoo上,需要使用Perl版本的`rename`命令。可以参考这个答案来获取Perl版本的`rename`命令。在Arch上,这个包的名称是`perl-rename`。

OpenSUSE、RedHat和Gentoo不支持在`rename`命令中使用正则表达式。原因是这里使用的`rename`脚本是由Larry Wall编写的,它原来是在文件`/usr/bin/rename`中,但是可能已经改名了(没有恶意的意思)。在Debian上,脚本的名称现在是`/usr/bin/file-rename`。

在openSUSE中,使用的是`util-linux`软件包中的`rename`命令,我没有找到任何提供`file-rename`、`prename`或`perl-rename`的软件包 - 对我来说,唯一有效的解决方法是通过cpan安装

在同样使用基于`util-linux`的`rename`命令的RHEL 6上也遇到了同样的问题。可以参考stackoverflow.com/a/48280659/1236128

从2012年到2023年的更新:在Debian 12 Bookworm中,这个软件包的名称是`rename`,一旦安装了Perl脚本,调用它的命令是`file-rename`。

0