正如标题所说,我正在寻找一个命令/工具 - 最好是从终端运行的东西(我在远程服务器上使用 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]
模式有可能出现在其他地方,请考虑将匹配项锚定到模式的末尾。请参阅绳子起始和结束处的锚点