0

我想使用 lvremove 通过匹配正则表达式来删除多个卷。

例如,我有一个卷组:

lv-1-8a
lv-1-846a
lv-1-5a
...

我试过了:

lvremove volgroup/lv-1-*

但似乎这不被接受,我收到错误:

One or more specified logical volumes(s) not found.

但是,我可以一一删除卷,

lvremove volgroup/lv-1-846a
Logical volume "lv-1-846a" successfully removed

谷歌搜索没有抛出任何相关结果,是否可以使用正则表达式来做到这一点?有很多卷。

4

1 回答 1

1

我猜你在输入时会收到一条错误消息

lvremove volgroup/lv-1-*

因为 shell 会尝试volgroup/lv-1-*在当前目录中扩展名称,也就是说,如果您从/tmp(例如)运行该命令,shell 将尝试在子目录中查找/tmp/volgroup名称以 . 开头的现有文件lv-1-。由于 shell 找不到这样的文件,因此它会启动lvremove带有参数的命令volgroup/lv-1-*......我猜你的 LV 都没有被命名lv-1-*

请记住,文件名扩展是由外壳程序执行的,而不是由命令(在您的情况下为 lvremove)。星号元字符对于大多数命令(如 lvremove)没有意义,并且与任何其他字符一样处理。

以下示例将执行您正在尝试的操作:

lvremove /dev/volgroup/lv-1-*

或者

cd /etc
lvremove volgroup/lv-1-*

在这两种情况下,shell 都将扩展为所有匹配的文件名 --- 从上面的示例中,在 shell 扩展之后,我建议的命令行实际上将运行为:

lvremove /dev/volgroup/lv-1-8a /dev/volgroup/lv-1-846a /dev/volgroup/lv-1-5a

或者

cd /etc
lvremove volgroup/lv-1-8a volgroup/lv-1-846a volgroup/lv-1-5a

当参数数量很大时,可能会达到命令行大小的限制。在这种情况下,该find命令很有用:

find /dev/volgroup -type l -exec lvremove -f '{}' ';'

最好的祝福。

于 2013-08-14T21:00:43.657 回答