我一直在玩 cygwin 中重命名工具的 perl 实现,最终通过从 cpan 安装使其工作。
我已经很长时间没有玩这些东西了,所以我对我的正则表达式东西有点生疏了。
基本上我只是想重命名一堆表单的文件夹
[2022-10-10] This is a Test - This is a Test (some stuff) [393933939339]
或者
[2022] This is a Test - This is a Test (some stuff) [393933939339]
并将开头处的内容移至[]
末尾,这样看起来就像
This is a Test - This is a Test (some stuff) [393933939339] [2022-10-10]
或者
This is a Test - This is a Test (some stuff) [393933939339] [2022]
我已经弄清楚如何使用位置参数来做到这一点,但我很难使用模式匹配来做到这一点[]
rename -n 's/^(.{12})(.*)$/$2 $1/'
将为具有完整日期的文件夹执行此操作,显然,但不适用于仅包含一年的文件夹。理想情况下,我想要一个表达式来处理所有这些。
我认为这可能会因为 [] 被视为运算符而变得复杂,因此可能需要以某种方式转义。
任何帮助表示赞赏。
正是如此。在 RE 中转义字符的标准方法是在其前面添加反斜杠
\
。所以,建议包含模式替换的尾随修饰符,因为这允许模式将换行符作为字符进行匹配(毕竟它们在文件名中是有效的)。另外,通过使用作为文件名模式,
s
将考虑的文件集限制为可以转换的文件集(这-v
会忽略以 开头的文件名等,这些文件名将由 shell 传递并作为有效参数选项进行处理);你也可以使用。rename
'['*
./*
我会做什么:
正则表达式匹配如下:
^
(
\[
.*?
\]
)
(
.*
)