使用正则表达式重命名多个文件夹

使用正则表达式重命名多个文件夹

正如标题所说,我正在寻找一个命令/工具 - 最好是从终端运行的东西(我在远程服务器上使用 Ubuntu),它可以一次替换多个目录的特定部分。文件夹结构如下:

Example.of.Structure[app]

Another.Example[app]

Third.Example.of.Structure[app]

我想重命名所有文件夹,因此 [app] 部分将从文件夹名称中删除。

我尝试过使用基本的正则表达式。匹配方括号及其内部的文本。

当我使用它时,它似乎工作得很好“找到它”- 但我真的不确定如何将其放入命令中。

我想到了一个正则表达式,用于查找括号内的文本(包括括号本身):\[\w+\]

但是我如何将其放入命令中?

谢谢。

答案1

你实际上不需要正则表达式。一个简单的 shell glob 加上参数扩展就可以做到:

$ for f in *\[*\]/; do echo mv "${f}" "${f/\[*\]}"; done
mv Another.Example[app]/ Another.Example/
mv Example.of.Structure[app]/ Example.of.Structure/
mv Third.Example.of.Structure[app]/ Third.Example.of.Structure/

echo(一旦您确认所建议的替换是正确的,则删除)。

如果您想使用基于正则表达式的工具,那么基于 perl 的工具rename/prename是显而易见的选择:

$ rename -n 's/\[\w+\]//' */
rename(Another.Example[app]/, Another.Example/)
rename(Example.of.Structure[app]/, Example.of.Structure/)
rename(Third.Example.of.Structure[app]/, Third.Example.of.Structure/)

-n(一旦您确认所建议的替换是正确的,则删除)。

这两个都符合第一的模式的出现。如果[app]模式有可能出现在其他地方,请考虑将匹配项锚定到模式的末尾。请参阅绳子起始和结束处的锚点

相关内容