我有一堆文件,其中包含用括号括起来的前缀代码。我想把这些前缀变成后缀,就像这样:
Finance-(4BF)-001.doc --> Finance-001-4BF.doc
Corporate-(K04)-001.doc --> Corporate-001-K04.doc
我之前在Windows机器上编写了一个非常简单的VBScript来完成这个任务,但现在我需要在Linux上完成。经过一番繁琐的搜索,我没有找到一个简单而优雅的方式来应用正则表达式到文件名并使用匹配的正则表达式重命名文件。
目前我有以下代码:
#!/bin/bash
for i in *.doc
do
x=${i//[\(\)]/}
echo "$i renames to: $x"
done
这将输出以下内容:
Corporate-(K04)-001.doc renames to: Corporate-K04-001.doc
Finance-(4BF)-001.doc renames to: Finance-4BF-001.doc
我知道上面的正则表达式只是去掉文件名中的括号...但一定有一种方法可以匹配它们的内容(例如
\((\w)\)
),然后在重命名命令中使用该匹配项(例如$1
)吧?另外,作为一个 Linux 初学者,我不理解
x=${...}
在做什么,因为我不知道它被称作什么,所以无法通过 Google 来搜索。我猜想它是将正则表达式应用于字符串 i
但是如果这样的话,为什么不能像 $1
和 $2
那样提取匹配项呢?谢谢!
rename
程序:Perl发行版中的rename(可能已预装在Ubuntu中),以及util-linux(-ng)中的rename(可能已预装在Fedora中)。它们是不同的。还有mmv
和许多其他程序... - ephemient